【问题标题】:How to change the position of navigationItem titleView如何改变navigationItem titleView的位置
【发布时间】:2018-01-16 07:28:18
【问题描述】:

我正在尝试创建自定义 titleView 并将位置更改为后退按钮旁边。

titleView 应该是这样的:

所以我做的是:

private func setupNavigationItems() {

    let label = UILabel()

    label.translatesAutoresizingMaskIntoConstraints = false

    label.text = "Info"
    label.textColor = UIColor.black
    label.textAlignment = .left
    navigationItem.titleView = label

    if let navigationBar = navigationController?.navigationBar {
        label.widthAnchor.constraint(equalTo: navigationBar.widthAnchor, constant: -40).isActive = true
    }

    self.navigationController?.navigationBar.tintColor = UIColor.black
}


override func updateViewConstraints() {
    super.updateViewConstraints()
    setupNavigationItems()
}

它有效,但在某些情况下我会崩溃:

*** 由于未捕获的异常“NSGenericException”而终止应用程序, 原因:'无法使用锚激活约束 和 因为他们没有共同点 祖先。约束或其锚点是否引用了 不同的视图层次结构?这是非法的。'

我该如何解决这个崩溃?有更好的方法来改变导航标题的位置吗?

谢谢

【问题讨论】:

    标签: ios swift uinavigationbar


    【解决方案1】:

    要获得您想要使用的效果:

    navigationItem.backBarButtonItem

    而不是:

    navigationItem.titleView

    backBarButtonItem 将自动显示您之前的视图控制器的标题,但可以修改为您喜欢的任何内容,如下所示:

    How to set back button text in Swift

    【讨论】:

      【解决方案2】:

      替换此代码:-

      label.widthAnchor.constraint(equalTo: navigationBar.widthAnchor, constant: -40).isActive = true
      

      使用此代码:-

      label.widthAnchor.constraint(equalTo: navigationBar.widthAnchor, multiplier: 0.8).isActive = true
      

      根据需要更改乘数。

      无约束设置UILabel的框架

      let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width * 0.8, height: 44))
      lbl.text = "Info"
      lbl.textColor = .black
      lbl.textAlignment = .left
      navigationItem.titleView = lbl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多