0

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

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

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

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

4

3 回答 3

1

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

于 2015-05-12T20:20:03.303 回答
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];

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

于 2015-05-12T21:17:47.647 回答
0

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

- (void)updateViewConstraints 
{
   [super updateViewConstraints] ;

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

}

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

于 2015-05-12T20:26:29.850 回答