仅IOS 11 : Navigation bar label off on top

标签 ios xcode9 swift4

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

带有设置 header 的代码示例:

    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

    }
}

Label off

最佳答案

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

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

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

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

关于仅IOS 11 : Navigation bar label off on top,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793954/

相关文章:

swift4 - 同时访问<地址>,但修改需要独占访问

swift4 - 'String' 类型的表达式模式不能匹配 'AVMetadataKey' 类型的值

swift - 如何从 Realm 列表加载数据

ios - 如何在Cocos2d 3.0中设置切换按钮?

ios - UIButton 禁用状态不会立即改变

iOS 应用程序 - 无法创建配置文件

ios - 链接到不同 View 的选项卡栏 Controller 之一取决于用户登录/注销?

ios - 将标签放在图像旁边

ios - 推送模态视图时,如何在返回父 View 的过程中传递数据?

ios - iOS Audio如何制作颤音或颤音效果