繁体   English   中英

为什么导航栏内容在iOS 11而不是IOS 10上显示?

[英]Why is the navigation bar content showing on iOS 11 but not IOS 10?

我们正在创建一个应用程序,该应用程序需要通过所有导航和选项卡视图控制器连接的不同视图的不同标题。 初始视图具有图像作为标题。 第二个视图以文本作为标题,第三个视图也以文本作为标题。

我们使用情节提要来构建此应用程序,这是控制器的层次结构。

Navigation Controller --> Tab Bar Controller --> View Controller 1, View Controller 2, View Controller 3

这是我们用于在第一个视图控制器上显示图像的代码:

    override func viewWillAppear(_ animated: Bool) {
     super.viewWillAppear(animated)

     let titleView = UIImageView()
     titleView.contentMode = .scaleAspectFit
     titleView.image = UIImage(named: "logo_white_thin")

     self.parent?.navigationItem.titleView = titleView
     self.parent?.navigationController?.navigationBar.isHidden = false
     self.navigationController?.navigationBar.isHidden = false
    }

这是我们用来显示文本作为其他两个视图控制器的标题的代码。

   override func viewWillAppear(_ animated: Bool) {
    guard let uid = Auth.auth().currentUser?.uid else {return}
    guard let username = users[uid]?.username else {return}

    self.parent?.navigationItem.titleView = title(text: username)
    self.parent?.navigationController?.navigationBar.isHidden = false
    self.navigationController?.navigationBar.isHidden = false

    print("Setting navigation bar title to ", username)
   }

title函数是用于返回标签的扩展:

   func title(text: String) -> UILabel {
    let label = UILabel()
    label.text = text
    label.textColor = UIColor.white
    label.font = UIFont.boldSystemFont(ofSize: label.font.pointSize)
    return label
   }

现在的问题是,当我们在iOS 11上测试我们的应用程序时,导航控制器可以正常工作,并且一切正常。 当我们在iOS 10上测试我们的应用程序时,来自导航控制器的图像和文本会神奇地消失。 知道为什么会这样吗?

这是最新情况的图像: 问题图片。 左边没有标题显示(IOS 10),右边没有标题显示(IOS 11)

我正在使用Swift 4运行最新版本的Xcode。在此先感谢您的帮助。

您需要设置标签的框架。 titleView是UIView的子类。 因此,它没有固有的contentSize。 但是,iOS 11为titleView提供了固有的内容大小。 因此,您无需设置其框架。 检查此答案。

iOS 11 navigationItem.titleView宽度未设置

func title(text: String) -> UILabel {
        let label = UILabel()
        // add frame
        label.frame = CGRect(x: 0, y: 0, width: 32, height: 32)
        label.text = text
        label.textColor = UIColor.black
        label.font = UIFont.boldSystemFont(ofSize: label.font.pointSize)
        return label
    }

请尝试以下步骤:

  1. 将视图控制器层次结构更改为TabbarViewController> NavigationController> ViewController1,ViewController2

在此处输入图片说明

  1. 将框架添加到标签。 iOS 11中的导航栏可以通过其innerContentSize配置标签的框架,但早期的iOS无法。

  2. 通过self.navigationItem.titleView = titleView设置self.navigationItem.titleView = titleView 不要使用self.parent?.navigationItem.titleView = titleView

  3. self.navigationController?.navigationBar.isHidden = false就足够了,不必调用self.parent?.navigationController?.navigationBar.isHidden = false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM