使用视觉格式化语言在代码中自动布局 UIViewController
Posted
技术标签:
【中文标题】使用视觉格式化语言在代码中自动布局 UIViewController【英文标题】:Auto Layout of a UIViewController in Code using the Visual Formatting Language 【发布时间】:2013-03-03 21:24:42 【问题描述】:我想使用可视格式化语言在代码中使用自动布局将视图 emptyAddButton 放置在左下方。这是我目前的方法。
初始化按钮emptyAddButton,自定义UIViewController:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
...
emptyAddButton = [[AddCardViewController alloc] init];
[emptyAddButton.view setFrame:CGRectMake(50, 300, 190, 65)]; //to define width + height. x, y is random and should be overwritten by auto auto layout
[self addChildViewController:emptyAddButton];
[emptyAddButton.view setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:emptyAddButton.view];
...
为左下位置+填充(10)分配自动布局
-(void)viewWillAppear:(BOOL)animated
...
NSDictionary *viewToLayout = [NSDictionary dictionaryWithObject:emptyAddButton.view forKey:@"emptyAddButton"];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(10)-[emptyAddButton]"
options:0
metrics:nil
views:viewToLayout]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: @"V:[emptyAddButton]-(10)-|"
options:0
metrics:nil
views:viewToLayout]];
...
目前 emptyAddButton 根本不显示。
知道如何正确定位视图吗?
【问题讨论】:
【参考方案1】:您无法设置框架、关闭自动调整大小的蒙版并添加约束 - 它会丢弃您的框架并重新计算为零宽度和高度。您可以通过注销视图控制器的子视图来确认这一点。
也将大小添加到 VFL 字符串中:
"H:|-(10)-[emptyAddButton(==190)]"
垂直约束也是如此。
顺便说一句,将视图的创建和约束的设置分开没有任何好处。一次完成所有操作(我会在 viewDidLoad 中完成)。目前,每次视图出现时,您都在重新创建约束。
【讨论】:
以上是关于使用视觉格式化语言在代码中自动布局 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章