繁体   English   中英

在Swift中以编程方式在两个子视图之间添加约束

[英]Add constraints between two sub views programmatically in Swift

我创建了两个子视图,一个在故事板中,一个带有代码,我想将第二个视图(使用代码创建)锚定到第一个视图(在故事板中),并带有一些约束,以便第二个视图位于第一个视图下方:

class ViewController: UIViewController{
    @IBOutlet weak var view1: UIView!
    override func viewDidLoad(){
        super.viewDidLoad()
        setUp()
    }

    func setUp(){

        var view2 = UIView()
        view2.setTranslatesAutoresizingMaskIntoConstraints(false)
        view2.frame = CGRectMake(10,10,10,10)

        self.view.addSubview(view2)
        self.view.addConstraint(NSLayoutConstraint(item: view1, attribute: NSLayoutAttribute.TopMargin, relatedBy: NSLayoutRelation.Equal, toItem: view2, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10))
    }
}

问题是我收到一条错误消息,说When added to a view, the constraint's items must be descendants of that view 在情节提要中有一些视图并在代码中有其他视图是不好的做法吗?

你有几个问题。

首先,该错误意味着view1view2都不是self.view的视图层次结构的一部分。 这可能是因为view1尚未从情节view1中解码出来。 尝试将这段代码从viewDidLoad()移至awakeFromNib() ,这是确保已加载它们的时间。

其次,您尝试设置视图的框架:

view2.frame = CGRectMake(10,10,10,10)

该框架将被布局引擎覆盖,使其毫无意义。 删除此行。

如果要使用自动布局,则需要明确指定视图的大小(高度和宽度)和位置(x和y)。 您添加的约束仅指定了y方向,因此您还需要添加更多约束(可能再增加3个)来指定x方向,宽度和高度,这些约束当前未定义。


在情节提要中有一些视图并在代码中有其他视图是不好的做法吗?

不,这很常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM