使用Autolayout时,我应该在哪里手动添加子视图

时间:2015-05-12 20:15:58

标签: ios objective-c autolayout visual-format-language

我正试图强迫自己开始在任何地方使用AutoLayout。我有一个使用框架非常简单的场景,但我无法使用Autolayout使其工作。

我有一个StoryBoard我无法触摸,因为它属于一个库。当与故事板相关的ViewController加载时,我想以编程方式添加一个View。所以我在UIView中创建了一个viewDidLoad,添加了高度和宽度的约束以及另外两个约束来定位它们。一切都很好但是宽度,我希望与其他视图具有相同的宽度。我该怎么做?

我在viewDidLoad中记录了“其他视图”的大小且尺寸不对,我也记录了self.view.frame.size.width,但也不正确。

我读到在viewDidLayoutSubviews之前没有设置正确的大小,所以我尝试在那里添加我的代码,但是我接到一个永远不会结束的viewDidLayoutSubviews调用循环。我做错了什么?

3 个答案:

答案 0 :(得分:1)

尝试将代码放入/* <stuff> */。检查子视图是否已经是视图的后代,如果不是,则添加带有约束的子视图。

答案 1 :(得分:1)

如果你想让两个视图具有相同的宽度,你应该这样做 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:。您可以在viewDidLoad中执行此操作。

NSLayoutConstraint *widthCon = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1 constant:0];

这假设来自库故事板的视图是使用约束进行的。

答案 2 :(得分:0)

你肯定可以使用UIViewController的这个方法,

- (void)updateViewConstraints 
{
   [super updateViewConstraints] ;

   // now update your subviews contraints or log your view sizes

}

当您使用基于约束的布局并希望根据UIViewController的约束更新子视图约束时,您应该始终使用以下方法。