我终于找到了解决方法。
使用Xcode 11.3.1,Simulator11.3.1,iPhoneX,Swift5.1.3,iOS13.3,
我想知道为什么我的应用程序的一半突然消失了!可能是对Xcode 11.3.1的更新吗?
下面显示了Xcode调试视图层次的屏幕截图。
左侧是iPhone 11 Pro模拟器显示的内容,右侧是Debug View层次结构:
显然,在视图层次结构中还有更多对象(例如底部的圆形按钮)没有在模拟器上显示(也没有在物理iPhoneX上显示)。而且NavigationBar完全丢失了!!!
蓝色突出显示的对象是自定义的NavigationBar(由stackView组成)。这在Xcode更新之前有效,但自那以后就没有。我真的不相信这一点。这里可能出什么问题??
如果不是Xcode更新,那么我对情节提要的重构也可能导致这种视图丢失。
在重构之前,所讨论的VC是另一个ViewController的ChildViewController。现在,它是该应用程序的入口。这种变化会带来视线损失吗?我想查看带有largeTitle的NavigationController。但是现在没有任何NavigationController!
这是设置navigationBar的代码:
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功能似乎已损坏!
但是让我们离开这个话题。
我剩下的问题:
我如何找回丢失的NavigationBar ?????????
。
----------------另一个发现-----------------------------] >
如果我将“ first-entry-ViewController”重新分配给旧的ViewController,最终将Menu-button-ViewController添加为ChildViewController->则一切正常!
如果我直接将“ first-entry-ViewController”分配为Menu-button-ViewController,则NavigationBar消失!
这里是概述:
使用Xcode 11.3.1,Simulator11.3.1,iPhoneX,Swift5.1.3,iOS13.3,我想知道为什么我的应用程序的一半突然消失了!!可能是对Xcode 11.3.1的更新吗?下面显示了一个...
我终于找到了解决方法。
确实与我的这个应用程序的登录架构有关。
[仅通过将“ first-entry-ViewController”设置为old-Main-ViewController的事实就产生了不同:
[这个旧的Main-ViewController(最终将Menu-button-ViewController添加为其子级)在其viewWillAppear
方法中确实有以下一行:
navigationController?.setNavigationBarHidden(true, animated: animated)
它的意图实际上是从不显示其自己的navigationBar。但是加载一个ChildViewController,它本身会显示自己的navigationBar。
与故事板的奇怪之处:即使很难将Menu-button-ViewController设置为first-entry,也仍然会考虑以前的first-entry设置的navigationController隐藏机制。对我而言,这似乎是情节提要中的一个错误。我假设可见的NavigationBar是默认行为。但是将其设置为一次隐藏即可使其保持隐藏状态,即使很难执行隐藏命令。无论如何,非常奇怪的行为。
通过消除该行-或更好-通过在Menu-Button-ViewController中添加“ with hidden = false”,使NavigationBar再次显示!!!
我的学习是关注整个App层次结构中的所有navigationController动作或变异。单个ViewController可能会在其navigationController上进行某些更改的事实可能还不够。您还必须检查事件parent-ViewControllers或segue-parents。而且最烦人的是,将不同的首次登录应用于VC确实需要您覆盖视图的默认行为,以确保显示视图!
我终于找到了解决方法。