Использование Xcode 11.3.1, Simulator11.3.1, iPhoneX, Swift5.1.3, iOS13.3,
Мне интересно, почему половина моего приложения внезапно исчезает! Может ли это быть обновление до Xcode 11.3.1???
Ниже показан снимок экрана с иерархией представлений отладки Xcode.
Левая сторона — это то, что показывает симулятор iPhone 11 Pro, а правая — иерархия представления отладки:
Очевидно, что в иерархии представлений есть еще много объектов (например, круглые кнопки внизу), которые не отображаются в Симуляторе (а также не отображаются на физическом iPhoneX). Также полностью отсутствует панель навигации !!!!
Объект, выделенный синим цветом, представляет собой пользовательскую панель навигации (состоящую из stackView). Это работало раньше, но не после обновления Xcode. Я действительно не верю в это. Что тут может пойти не так??
Если это не обновление Xcode, то мой рефакторинг раскадровки также может быть причиной этой потери просмотра.
До моего рефакторинга VC, о котором идет речь, был ChildViewController другого ViewController. Теперь это точка входа в приложение. Может ли это изменение привести к потере просмотров? Я хочу видеть NavigationController с largeTitle. Но теперь никакого NavigationController'а нет!
Вот код, который настраивает панель навигации:
override func viewDidLoad() {
// set up navigationItem and navigationController look and feeel
navigationItem.largeTitleDisplayMode = .always
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
navigationController?.set_iOS12_lookAndFeel()
navigationItem.title = "bluub"
}
И необходимое расширение NavigationController:
import UIKit
extension UINavigationController {
func set_iOS12_lookAndFeel() {
if #available(iOS 13.0, *) {
self.keep_iOS12_lookAndFeel()
} else {
let attrLargeTitle = AppConstants.FontAttributes.NavBar_LargeTitleTextAttributes
self.navigationBar.largeTitleTextAttributes = attrLargeTitle
let attrTitle = AppConstants.FontAttributes.NavBar_TitleTextAttributes
self.navigationBar.titleTextAttributes = attrTitle
}
}
private func keep_iOS12_lookAndFeel() {
if #available(iOS 13.0, *) {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithDefaultBackground()
navBarAppearance.backgroundEffect = .init(style: .systemThickMaterialDark)
navBarAppearance.titleTextAttributes = AppConstants.FontAttributes.NavBar_TitleTextAttributes
navBarAppearance.largeTitleTextAttributes = AppConstants.FontAttributes.NavBar_LargeTitleTextAttributes
navBarAppearance.buttonAppearance.normal.titleTextAttributes = AppConstants.FontAttributes.NavBar_ButtonAppearance_Normal
navBarAppearance.doneButtonAppearance.normal.titleTextAttributes = AppConstants.FontAttributes.NavBar_Done_ButtonAppearance_Normal
self.navigationBar.standardAppearance = navBarAppearance
self.navigationBar.scrollEdgeAppearance = navBarAppearance
}
}
}
.
---------------- больше выводов -----------------------------
После очередного рефакторинга раскадровки я смог вернуть круглые кнопки меню. Тем не менее, largeTitle-NavigationBar по-прежнему полностью отсутствует.
Откровенно говоря, последний рефакторинг не вводил никаких новых ограничений или других настроек раскадровки, как раньше. Тот факт, что я выкинул NavigationController и заменил его идентичным новым, а также переназначил то или иное ограничение меню-кнопки-View, сделал нижнее меню живым. Насколько я могу судить, никаких отличий от предыдущей раскадровки не было.
Очень раздражает, почему раскадровку нужно перерисовывать в основном для правильного рендеринга. Что-то здесь кажется поврежденным, что касается функциональности Xcode с раскадровкой!
Но оставим этот разговор.
Мой оставшийся вопрос:
Как восстановить отсутствующую панель навигации ?????????
.
---------------- еще одна находка -----------------------------
Если я переназначу «first-entry-ViewController» на старый ViewController, который в конечном итоге добавит Menu-button-ViewController в качестве ChildViewController --> тогда все будет работать!
Если я назначу "first-entry-ViewController" непосредственно ViewController-кнопкой меню, то NavigationBar исчезнет!
Вот обзор: