NSLayoutConstraint 规则

NSLayoutConstraint rules

我在编写这段代码时看不到菜单栏(蓝色视图),但是当我将参数从 50 更改为 100 时,它显示了。它似乎位于状态字段的后面。我希望约束与状态栏相关,而不是屏幕顶部。有人知道为什么吗?

func setupMenuBar(){
    view.addSubview(menuBar)
    view.addConstriantswithFormat(format: "H:|[v0]|", views:menuBar)
    view.addConstriantswithFormat(format: "V:|[v0(50)]", views:menuBar)
} 

如果红色视图是一个导航栏,你可能应该注意不要在顶部栏下延伸边缘;否则,您需要根据红色视图来约束蓝色视图。

我更喜欢使用锚点。它更容易阅读。

例如 (Swift):

blueView.topAnchor.constraint(equalTo: redView.bottomAnchor).isActive = true
blueView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
blueView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
blueView.heightAnchor.constraint(equalToConstant: 50).isActive = true

您需要将 menuBar 视图限制在视图的 安全区域 以使其与导航栏底部对齐。

虽然很难用视觉格式语言来做。这种替代方法应该很容易理解:

    view.addSubview(menuBar)

    let guide = view.safeAreaLayoutGuide

    NSLayoutConstraint.activate([

        menuBar.topAnchor.constraint(equalTo: guide.topAnchor, constant: 0.0),

        menuBar.leadingAnchor.constraint(equalTo: guide.leadingAnchor, constant: 0.0),
        menuBar.trailingAnchor.constraint(equalTo: guide.trailingAnchor, constant: 0.0),

        menuBar.heightAnchor.constraint(equalToConstant: 50.0),

        ])