【问题标题】:Why is the navigation bar content showing on iOS 11 but not IOS 10?为什么导航栏内容在 iOS 11 上显示,而在 iOS 10 上不显示?
【发布时间】:2018-05-03 07:19:33
【问题描述】:

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

我们使用故事板来构建这个应用程序,这里是控制器的层次结构。

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 上测试我们的应用程序时,导航控制器中的图像和文本神奇地消失了。知道为什么会这样吗?

这是最新情况的图像: Picture of the issue. On the left, no title shows up (IOS 10) and on the right a title does show up (IOS 11)

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

【问题讨论】:

  • 尝试在title()方法中设置标签框架
  • @iPatel 我不认为它是 title() 方法的问题,因为我还有一个视图控制器,它的标题是一个图像视图,也不会出现......

标签: ios iphone swift uikit


【解决方案1】:

您需要设置标签的框架。 titleView 是 UIView 的子类。所以它没有内在的 contentSize。但是,iOS 11 为 titleView 提供了固有的内容大小。所以你不需要设置它的框架。检查这个答案。

iOS 11 navigationItem.titleView Width Not Set

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
    }

【讨论】:

    【解决方案2】:

    尝试以下步骤:

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

    1. 将框架添加到标签。 iOS 11 中的导航栏可以通过其 intrinsicContentSize 配置标签的框架,但早期的 iO​​S 不能。

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

    3. self.navigationController?.navigationBar.isHidden = false就够了,不用打self.parent?.navigationController?.navigationBar.isHidden = false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2018-04-18
      相关资源
      最近更新 更多