【问题标题】:IOS 11 only: Navigation bar label off on top仅限 IOS 11:顶部的导航栏标签关闭
【发布时间】:2017-10-17 15:37:22
【问题描述】:

IOS 11 导致主标签从顶部移动一点,而不是保持在顶部。该问题仅出现在 IOS 11 上。使用不同的 IOS,一切看起来都很好。

带有设置标题的代码示例:

    private func setHeader(agentName: String = "", isTyping: Bool = false) -> Void {
    if (agentName.isEmpty) {
        self.containerViewController?.navigationItem.titleView = nil
    } else {
        let headerView: UIView = {
            let rect = CGRect(x: 0, y: 0, width: 320, height: 44)
            let uiview = UIView(frame: rect)

            return uiview
        }()


        let headerLabel: UILabel = {
            let label = UILabel(frame: CGRect(x: 0, y: 0, width: headerView.frame.width, height: 20))
            label.font = UIFont.systemFont(ofSize: 18)
            label.textAlignment = .center
            label.translatesAutoresizingMaskIntoConstraints = false
            return label
        }()

        let subheaderLabel: UILabel = {
            let label = UILabel(frame: CGRect(x: 0, y: 0, width: headerView.frame.width, height: 12))
            label.font = UIFont.systemFont(ofSize: 12)
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = self.title
            return label
        }()


        headerView.addSubview(headerLabel)
        headerView.addSubview(subheaderLabel)

        let viewsDictionary = ["header": headerLabel, "subheader": subheaderLabel]
        headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[header]|", options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
        headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[subheader]|", options: NSLayoutFormatOptions(), metrics: nil, views: viewsDictionary))
        headerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[header(20)]-[subheader]", options: [], metrics: nil, views: viewsDictionary))

        self.containerViewController?.navigationItem.titleView = headerView

    }
}

【问题讨论】:

    标签: ios xcode9 swift4


    【解决方案1】:

    从 iOS 11 开始,添加到工具栏的视图现在使用自动布局进行布局。您应该在 headerView 上添加大小限制。例如:

    headerView.widthAnchor.constraintEqualToConstant(320.0).isActive = true
    headerView.heightAnchor.constraintEqualToConstant(44.0).isActive = true
    

    否则,自动布局将使用您的标题视图的内在内容大小,这可能不是您所期望的。

    有关更多信息,请参阅 WWDC 2017 会议Updating your app for iOS 11

    【讨论】:

      【解决方案2】:

      @beyowulf 说您必须添加尺寸限制。我认为在你的情况下添加height constraint 是可以的:

      headerView.heightAnchor.constraint(equalToConstant: 22.0).isActive = true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 2017-12-19
        相关资源
        最近更新 更多