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

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 и установите для нее изображение.

iOSDev
источник
но стиль UIBarButtonItem мне не нужен.
лю юань
1

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

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

пользователь462990
источник
0

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

Сетмр
источник