添加约束后,视图及其子视图消失

时间:2017-02-26 23:52:25

标签: ios swift autolayout

我的控制器顶部有一个视图(addressLabelBackground),位于导航栏下方。它在纵向模式下显示正常,但是当我将设备转为横向模式时,我正试图让它重新调整尺寸。

所以我试图在故事板中添加一些约束,方法是将addressLabelBackground固定在视图(0)的左侧,视图的右侧(0)和顶部的导航栏(0),但是当我运行应用程序,视图及其所有子视图都会消失。

我还尝试以编程方式添加约束(就像我为子视图所做的那样),但同样,addressLabelBackground和内部的子视图消失了。

这是代码(在viewDidLoad中): 在回答后更新,发生了崩溃

    view.addSubview(addressLabelBackground)
    addressLabelBackground.addSubview(addressLabel)
    addressLabelBackground.addSubview(turnToTechLogo)

    addressLabelBackground.translatesAutoresizingMaskIntoConstraints = false

    addressLabelBackground.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    addressLabelBackground.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    addressLabelBackground.topAnchor.constraint(equalTo: (navigationController?.navigationBar.bottomAnchor)!).isActive = true

    addressLabel.font = UIFont.boldSystemFont(ofSize: 16.0)
    addressLabel.translatesAutoresizingMaskIntoConstraints = false

    addressLabel.centerXAnchor.constraint(equalTo: addressLabelBackground.centerXAnchor).isActive = true
    addressLabel.topAnchor.constraint(equalTo: addressLabelBackground.topAnchor).isActive = true
    addressLabel.bottomAnchor.constraint(equalTo: addressLabelBackground.bottomAnchor).isActive = true

addressLabel的约束在纵向和横向上都能很好地工作 - 它在视图中保持居中。但是,当我尝试以相同的方式或在故事板中添加addressLabelBackground的约束时,一切都消失了。

当设备处于横向模式时,如何让此视图保持固定在导航栏下方并拉伸其宽度以适应屏幕宽度?

编辑(第二天):仍然试图解决这个问题。我已经尝试制作一个名为innerContainer的子视图,并将其固定到顶部的那个:

    let frame = CGRect(x: 0, y: 20, width: self.view.bounds.width, height: self.view.bounds.height-20)
    let innerContainer = UIView(frame: frame)

    self.view.addSubview(innerContainer)
    innerContainer.addSubview(addressLabelBackground)

    addressLabelBackground.translatesAutoresizingMaskIntoConstraints = false
    addressLabelBackground.topAnchor.constraint(equalTo: innerContainer.topAnchor).isActive = true

但它又一次消失了。

我也尝试将它固定在故事板中topLayoutGuide的顶部(0分),然后它也消失了。

1 个答案:

答案 0 :(得分:0)

您的addressLabelBackground需要一个自动布局,不仅固定在顶部,而且固定在它的超视图两侧。用这两个替换现有的widthAnchor约束:

addressLabelBackground.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
addressLabelBackground.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true