Предупреждение «Обычный стиль не поддерживается в элементе навигации» с моим настроенным элементом кнопки панели


88

Я перетаскиваю кнопку с круглым прямоугольником в положение правого элемента кнопки панели и устанавливаю изображение для кнопки с круглым прямоугольником. Все работает нормально, кроме предупреждения «Обычный стиль не поддерживается в элементе навигации». Даже если я выберу стиль элемента кнопки панели на «С рамкой», предупреждение все равно будет. Что случилось с Xcode 4.2? Заранее спасибо!

Пс. Я настроил многие элементы кнопок панели с круглой прямоугольной кнопкой, иногда Xcode 4.2 показывает только одно предупреждение для элемента кнопки панели, иногда показывает предупреждения для всех элементов кнопки панели.


1
Я написал об этом сообщение в блоге: blog.mosheberman.com/…
Моше

Не добавляйте кнопки, добавляйте элементы кнопок панели. Это была моя ошибка.
Дэниел Спрингер,

Ответы:


135

Мне удалось удалить эти ошибки, вручную отредактировав файлы раскадровки и обнаружив оскорбительную запись style = "plain" в элементах Bar Button в <navigationItem>элементе.

Изменено с:

<barButtonItem key="rightBarButtonItem" style="plain" id="juB-DL-F9i">

Кому:

<barButtonItem key="rightBarButtonItem" id="juB-DL-F9i">

Это сняло предупреждения ... правильные или неправильные.

Это может быть колоссальный взлом, и большая проблема заключается в том, что я не являюсь его основной причиной и не удаляю элементы невидимых кнопок панели из всего документа. Это произошло после того, как мы перебрали все элементы один за другим и обнаружили, что некоторые панели навигации пусты (без дочерних элементов) и, вероятно, произошло с большим количеством наследования копирования и вставки (cmd + c | v), а не с использованием дубликата (cmd + d) построить интерфейс. Хотя исходная причина не была основной причиной, симптомом было то, что элементы полосы не отображались в документе «вид схемы», который необходимо исправить. Поведение Interface Builder временами поражает меня своей нюансировкой, а пустой контейнер, в котором должно быть что-то в виде схемы, - это запах. Что ж, теперь это для меня. Иногда удаление сбойного узла и перестройка решают самые странные проблемы.

ВНИМАНИЕ: сделайте резервную копию своих раскадровок, прежде чем попробовать это ... контроль версий - ваш друг ... Я не несу ответственности, если ваша раскадровка полностью заполнена и не компилируется. Все, что вы получите, - это "Я же вам сказал!" Несколько раз я усвоил свой труд, но тщательный контроль версий избавил меня от головной боли.

РЕДАКТИРОВАТЬ: помещайте скобки в блоки кода


24
выберите элемент barbutton в построителе интерфейса, откройте панель атрибутов справа и измените стиль элемента кнопки панели на «Bordered», применив такое же различие к файлу раскадровки. так что это должно быть безопасно.
Маш

Спасибо за совет @mash, то, как я это сделал, было ужасно вызвано потенциальной болью и страданиями.
Hunter-Orionnoir

@ SpaceDog2 Спасибо за внимание. Я еще не обновился, поэтому не могу добавить к этому подтверждение. В любом случае я был бы очень осторожен с этим методом. Я знаю, что это помогло многим людям. Со временем мы увидим, перестанет ли он помогать.
Hunter-Orionnoir

5
Это решение отлично работало для меня в Xcode 7.1. Кроме того, вместо непосредственного редактирования исходного кода вы можете изменить это в самой раскадровке (переключив стиль с простого на граничный), и это даст тот же результат, что и простое удаление вручную style="plain"из исходного кода раскадровки. Так что мне это предложение Хантера кажется законным.
Эрик ван дер Нейт

Посмотрите и ответ Дстудебы, я даже не знал, что то, что он описал, возможно. может избавить всех от боли и страданий от ручного редактирования файла. Контроль версий - ваши друзья, будьте осторожны. ;)
Hunter-Orionnoir

31

Если вы нажмете на предупреждение и не перейдете к нарушающему элементу навигации, сделайте следующее. (визуальное представление ответа Хантера более безопасным методом из добавленных комментариев)

В браузере файлов щелкните правой кнопкой мыши раскадровку и выберите Open As Source Code

введите описание изображения здесь

На странице исходного кода выполните поиск по запросу «plain» и найдите тот, который прикреплен к элементу навигации.

введите описание изображения здесь

Для того, чтобы получить имя View, поставил «сцену» в строке поиска и нажмите на стрелку назад поиска для поиска первой инстанции на этой метке вышеnavigationItem

введите описание изображения здесь

Вот имя вашей сцены, теперь вы можете изменить вид раскадровки обратно Interface Builder - Storyboardс помощью метода правой кнопки мыши, описанного выше, а затем перейти к выбору сцены в меню сцены и элемента панели внутри нее.

введите описание изображения здесь

Перейдите в инспектор атрибутов и измените стиль с PlainнаBordered

введите описание изображения здесь


1
Круто. Я обязательно попробую это в следующий раз, когда это произойдет.
Hunter-Orionnoir

13

Я остановил предупреждение о простом стиле, покопавшись в структуре документа. Это показывало мой элемент навигации и внутри этих 2 элементов кнопок панели, и внутри каждого из них кнопка. Неправильная настройка была на элементе кнопки панели. В инспекторе атрибутов я изменил стиль с простого на готово, и предупреждение исчезло. Примечание: я использую XCode 5.


8

Если вы используете раскадровку, щелкните предупреждение, и вы перейдете к проблемному элементу навигации (у меня было два для проблемы, один привел меня туда, а другой нет) - измените стиль и очистите проект.

Стиль кнопок панели установлен на простой


В приведенной выше задаче меня это ни к чему не привело. Я думаю, что это камень преткновения в данной конкретной проблеме, элемент вообще отсутствовал в навигаторе, но ответ dstudeba имеет интересный подход, интересно, помогает ли людям открытие раскадровки по-другому.
Hunter-Orionnoir

Это наиболее подходящий ответ. Я изменил стиль на Bordered.
Андрей

6

backBarButtonItem leftBarButtonItemи rightBarButtonItemявляются UINavigationItemобъектами. Нет styleсобственности, UINavigationItemпоэтому это причина предупреждения. Вы должны установить barButtons программно:

iOS 4:  

UIButton *bt=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 [bt setFrame:YourFrame];
 //[bt setImage:[UIImage imageNamed:@"backBT"] forState:UIControlStateNormal];
 [bt addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *leftButton=[[UIBarButtonItem alloc] initWithCustomView:bt];
 self.navigationItem.leftBarButtonItem=leftButton;

Для iOS 5+:

Прочтите раздел «Настройка внешнего вида» справочника UIBarButtonItem .


3
У меня есть унаследованный проект с множеством контроллеров и кнопок представления. Я не могу уговорить XCode сказать мне, какая кнопка вызывает предупреждение. Есть подсказки? Благодарность!
Olie

Может быть, пробежаться по вашим контроллерам представления и «найти» UIBarButtonItenStyle. Обычно свойство устанавливается неправильно
TimWhiting,

1

На панели навигации попробуйте использовать UIBarButtonItem вместо кнопки Round rect и установите для нее изображение.


но стиль UIBarButtonItem мне не нужен.
лю юань

1

В моем случае это было изображение стрелки назад, для которой установлено значение «Обычный».

Появляется сообщение об ошибке, относящееся ко всем элементам на панели навигации.


0

Убедившись, что для всех кнопок панели в раскадровке установлено любое значение, кроме простого, убедитесь, что вы сделали git commit и удалили производные данные. Я всю жизнь пытался понять, почему проблема не устраняется сама собой, и удаление папки с производными данными устранило ее для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.