В iOS 13, если вы настраиваете прокручиваемый контроллер корневого представления (например, UITableViewController) в контроллере навигации, а затем помещаете этот контроллер навигации в панель сведений UISplitViewController, тогда фон панели навигации не виден, когда прокручиваемый контент находится вверху.
Вы можете увидеть это, создав новый проект iOS на основе шаблона Master / Detail. Затем измените раскадровку, чтобы использовать UITableViewController внутри контроллера Nav панели подробностей. Переведите устройство / симулятор в режим Light Appearance (проблема лучше, чем в Dark). Запустите приложение и обратите внимание, что область панели навигации имеет тот же цвет, что и фон представления таблицы. Теперь прокрутите таблицу вверх, и цвет навигационной панели изменится на стандартный светло-серый. Пусть табличное представление вернется к началу, и цвет навигационной панели снова исчезнет.
Я видел это только на панели подробностей контроллера разделенного представления.
Как отключить эту «функцию», чтобы навигационная панель выглядела нормально, как и любая другая навигационная панель, используемая где-либо еще, кроме панели сведений контроллера раздельного просмотра?
Нет соответствующих изменений API для UISplitViewController
или UISplitViewControllerDelegate
. В UINavigationController
тоже ничего нет.
После некоторых копаний я нашел один обходной путь, но я бы хотел найти способ избежать этого.
Класс UINavigationBar
теперь имеет несколько новых свойств для настройки его внешнего вида. Как ни странно, ни один из них не упоминается в разделе «Настройка внешнего вида панели навигации» в документации для UINavigationBar
.
В iOS 13 появилось три новых свойства:
standardAppearance
compactAppearance
scrollEdgeAppearance
Все три типа UINavigationBarAppearance
.
По умолчанию установлен только первый.
Даже если scrollEdgeAppearance
равно nil
, панель сведений контроллера разделения работает так, как если бы она была установлена с backgroundColor
, установленным на clear
цвет.
Таким образом, обходной путь - добавить следующую строку в метод viewDidLoad
корневого контроллера навигации контроллера:
navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
Почему это нужно только в этом одном случае? Есть ли более правильное решение, кроме добавления этого кода?
Я заметил, что ни одно из приложений Apple (по крайней мере, «Почта», «Примечания» и «Файлы»), похоже, не использует эту «функцию».