我正试图强迫自己开始在任何地方使用AutoLayout。我有一个使用框架非常简单的场景,但我无法使用Autolayout使其工作。
我有一个StoryBoard我无法触摸,因为它属于一个库。当与故事板相关的ViewController加载时,我想以编程方式添加一个View。所以我在UIView
中创建了一个viewDidLoad
,添加了高度和宽度的约束以及另外两个约束来定位它们。一切都很好但是宽度,我希望与其他视图具有相同的宽度。我该怎么做?
我在viewDidLoad
中记录了“其他视图”的大小且尺寸不对,我也记录了self.view.frame.size.width
,但也不正确。
我读到在viewDidLayoutSubviews
之前没有设置正确的大小,所以我尝试在那里添加我的代码,但是我接到一个永远不会结束的viewDidLayoutSubviews
调用循环。我做错了什么?
答案 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的约束更新子视图约束时,您应该始终使用以下方法。