更新到Xcode 11.3.1-故事板重构后导航栏和一半视图消失

问题描述 投票:1回答:1

使用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!

enter image description here

这是设置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 ?????????

enter image description here

----------------另一个发现-----------------------------] >

如果我将“ first-entry-ViewController”重新分配给旧的ViewController,最终将Menu-button-ViewController添加为ChildViewController->则一切正常!

如果我直接将“ first-entry-ViewController”分配为Menu-button-ViewController,则NavigationBar消失!

这里是概述:

enter image description here

使用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确实需要您覆盖视图的默认行为,以确保显示视图!

swift xcode navigationcontroller large-title ios13.3
1个回答
0
投票

我终于找到了解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.