Ios NSLayoutConstraint规则

Ios NSLayoutConstraint规则,ios,swift,nslayoutconstraint,Ios,Swift,Nslayoutconstraint,我写这段代码时看不到菜单栏(蓝色视图),但当我将参数从50更改为100时,它会显示出来。它似乎位于状态字段后面。我希望约束与状态栏相关,而不是与顶部屏幕相关。知道原因的人 func setupMenuBar(){ view.addSubview(menuBar) view.addConstriantswithFormat(format: "H:|[v0]|", views:menuBar) view.addConstriantswithFormat(format: "V:

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

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

如果红色视图是导航栏,您可能应该查看顶部栏下未延伸的边缘;否则,需要根据红色视图约束蓝色视图

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

例如(Swift):


您需要将
菜单栏
视图约束到视图的安全区域,使其与导航栏底部对齐

但很难使用视觉格式语言。此替代方法应易于理解:

    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),

        ])

检查视图层次结构,查看蓝色视图是否在红色视图后面。行:
view.addConstriantswithFormat(格式:“V:|[v0(50)]”,视图:菜单栏)
显示“将视图高度设为50分”,这将使其被红色导航栏覆盖。将其更改为
(100)
将显示蓝色视图的下半部分。如果主视图位于导航栏下方,则需要对此进行说明。
    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),

        ])