簡體   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