2015-12-31 71 views
0

如果我從storyboard添加視圖,我可以通過代碼處理它們的自動佈局約束,但是如果我在通過代碼添加的視圖上嘗試此操作,無法處理它。Autolayout(VFL)for View添加了代碼而不是storyboard

我打電話在我的viewDidLoad()下面的代碼,但不起作用,什麼是缺少的部分?

var testView = UIView() 
    testView.backgroundColor = UIColor.greenColor() 
    self.view.addSubview(testView) 

    let views : [String : AnyObject] = ["testView": testView] 
    var allConstraints = [NSLayoutConstraint]() 

    let verticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
     "V:|-[testView(100)]", 
     options: [], 
     metrics: nil, 
     views: views) 
    allConstraints += verticalConstraint 

    let horizontalConstraint = NSLayoutConstraint.constraintsWithVisualFormat(
     "H:|-[testView(200)]", 
     options: [], 
     metrics: nil, 
     views: views) 
    allConstraints += horizontalConstraint 

    NSLayoutConstraint.activateConstraints(allConstraints) 

PS:還嘗試了這些線,但並沒有幫助

self.view.addConstraints(verticalConstraint) 
    self.view.addConstraints(horizontalConstraint) 
+0

什麼是你得到的錯誤或佈局約束警告? – ozgur

+0

@ozgur錯誤噸我甚至不能複製/粘貼在這裏,但主要是「將嘗試通過打破約束恢復」,如果你有時間,你可以複製/粘貼到新項目的主視圖控制器的viewdidload查看所有問題我得到 – turushan

回答

2

您需要打開自動調整口罩,以限制過翻譯。默認情況下,它的設置爲true,如果你傾向於忘記這一點,它會添加你不想要的約束。

您可以通過

var myView = UIView() 
myView.translatesAutoresizingMaskIntoConstraints = false 
view.addSubview(myView) 

translatesAutoresizingMaskIntoConstraints

如果這個屬性的值是YES此設置爲false,系統會創建一組 約束地複製視圖的 自動尺寸指定的行爲面具。默認情況下,對於以編程方式創建的任何視圖 ,該屬性設置爲YES。如果您在Interface Builder中添加視圖, 系統會自動將此屬性設置爲NO。

+0

謝謝你,你救了我的一天!我試圖設置translatesAutoresizingMaskIntoConstraints我以前的視圖的superview,而不是視圖本身:/ – turushan

相關問題