使用 Xcode 11.3.1、Simulator11.3.1、iPhoneX、Swift5.1.3、iOS13.3、
我想知道为什么我的应用程序的一半突然消失了!会不会是 Xcode 11.3.1 的更新???
下面显示了 Xcode 调试视图层次结构的屏幕截图。
左侧是 iPhone 11 Pro Simulator 显示的内容,右侧是 Debug View Hierarchy:
显然,视图层次结构中有更多对象(例如底部的圆形按钮)没有显示在模拟器上(也没有显示在物理 iPhoneX 上)。导航栏也完全丢失了!!!!
蓝色突出显示的对象是自定义导航栏(由 stackView 组成)。这在 Xcode 更新之前有效,但在 Xcode 更新之后无效。我真的不相信这一点。这里可能出了什么问题?
如果不是 Xcode 更新,那么我对情节提要的重构也可能是导致这种视图丢失的原因。
在我重构之前,有问题的 VC 是另一个 ViewController 的 ChildViewController。现在,它是应用程序的入口点。这种变化会带来视野损失吗?我想看一个带有 largeTitle 的 NavigationController。但是现在没有任何 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 并用一个相同的新控制器替换了它,再加上重新分配了菜单按钮视图的一个或另一个约束,确实让底部菜单恢复了活力。据我所知,与之前的故事板没有区别。
为什么故事板需要重新绘制才能正确渲染,这很烦人。对于带有情节提要的 Xcode 功能,这里似乎有些损坏!
但是让我们离开这个话题。
我剩下的问题:
我怎样才能找回丢失的 NavigationBar ?????????
.
---------------- 另一个发现 -----------------------------
如果我将“first-entry-ViewController”重新分配给旧的 ViewController,最终将 Menu-button-ViewController 添加为 ChildViewController --> 那么一切正常!
如果我直接将“first-entry-ViewController”指定为 Menu-button-ViewController,那么 NavigationBar 就会消失!
这是概述: