我想在视图中添加一个较小的子视图并为其添加约束。领先和训练约束应为50.0,高度和底部应为80.0。
我以这种方式创建我的子视图
let mySubview = UIView(frame: CGRect(x: 50.0, y: 80.0, width: 540.0, height: 220.0))
然后我尝试使用此代码
将其添加到视图中let topConstraint = NSLayoutConstraint(item: mySubview, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 80.0)
let bottomConstraint = NSLayoutConstraint(item: mySubview, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: 80.0)
let leadingConstraint = NSLayoutConstraint(item: mySubview, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 50.0)
let trailingConstraint = NSLayoutConstraint(item: mySubview, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 50.0)
mySubview.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(mySubview)
self.view.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint])
self.view.layoutIfNeeded()
但是这些约束没有任何效果。这个视图在iPad上看起来不错,可能是因为第一个初始化CGRect(x: 50.0, y: 80.0, width: 540.0, height: 220.0)
,但在较小的屏幕上看起来非常大。我应该尝试根据屏幕初始化UIView,还是可以通过添加约束来解决这个问题?
答案 0 :(得分:2)
你需要这个:
mySubview.translatesAutoresizingMaskIntoConstraints = false
translatesAutoresizingMaskIntoConstraints 是一个布尔值 确定是否将视图的自动调整遮罩转换为 自动布局约束。
答案 1 :(得分:2)
你应该尝试使用http://snapkit.io/docs/
let box = UIView()
superview.addSubview(box)
box.snp.makeConstraints { (make) -> Void in
make.top.equalTo(superview).offset(80)
make.left.equalTo(superview).offset(50)
make.bottom.equalTo(superview).offset(-80)
make.right.equalTo(superview).offset(-50)
}
答案 2 :(得分:1)
由于您想要使用自动布局,因此在没有帧的情况下实例化子视图就足够了(因为考虑到约束会计算帧):let mySubview = UIView()
。
然后,您必须为您的子视图设置translatesAutoresizingMaskIntoConstraints
到false
。
您还必须将底部约束的常量更改为 -80 ,将尾部约束的常量更改为 -50 。如果你想保持正常数,你也可以切换项目(self.view
/ mySubview
):
let bottomConstraint = NSLayoutConstraint(item: self.view, attribute: .bottom, relatedBy: .equal, toItem: mySubview, attribute: .bottom, multiplier: 1, constant: 80.0)
let trailingConstraint = NSLayoutConstraint(item: self.view, attribute: .trailing, relatedBy: .equal, toItem: mySubview, attribute: .trailing, multiplier: 1, constant: 50.0)
最后但并非最不重要的是,您可以删除self.view.layoutIfNeeded()
行。
答案 3 :(得分:0)
您忘记将translatesAutoresizingMaskIntoConstraints
设置为false
let mySubview = UIView(frame: CGRect(x: 50.0, y: 80.0, width: 540.0, height: 220.0))
mySubview.translatesAutoresizingMaskIntoConstraints = false
答案 4 :(得分:0)
我认为这可以解决问题
mySubview.translatesAutoresizingMaskIntoConstraints = false
喜欢这个
let mySubview: UIView = {
let thisView = UIView(frame: CGRect(x: 50.0, y: 80.0, width: 540.0, height: 220.0))
thisView.translatesAutoresizingMaskIntoConstraints = false
return thisView
}()