我的控制器顶部有一个视图(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分),然后它也消失了。
答案 0 :(得分:0)
您的addressLabelBackground
需要一个自动布局,不仅固定在顶部,而且固定在它的超视图两侧。用这两个替换现有的widthAnchor
约束:
addressLabelBackground.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
addressLabelBackground.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true