使用自动布局以编程方式创建视图层次结构
Posted
技术标签:
【中文标题】使用自动布局以编程方式创建视图层次结构【英文标题】:Create view hierarchy programmatically with Auto Layout 【发布时间】:2014-10-28 14:45:00 【问题描述】:我想该层次结构具有以下结构: 界面视图-> UIWebView 我想在 UIView 的底部为 UIToolbar 留出一些空间。
结果应该和这个 xib 文件一样:
到目前为止的代码:
- (void)loadView
UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = view;
self.webView = [[UIWebView alloc] init];
self.webView.scalesPageToFit = YES;
[self.view addSubview:self.webView];
self.view.translatesAutoresizingMaskIntoConstraints = NO;
self.webView.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *nameMap = @@"webView" : self.webView;
NSArray *c1Array =
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[webView]-0-|"
options:0
metrics:nil
views:nameMap];
NSArray *c2Array =
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[webView]-45-|"
options:0
metrics:nil
views:nameMap];
[self.view addConstraints:c1Array];
[self.view addConstraints:c2Array];
当我使用以下方法进行跟踪时:
po [[UIWindow keyWindow] _autolayoutTrace]
我知道 UIView 和 UIWebView 都有不明确的布局。
我的方法可能有什么问题?
【问题讨论】:
【参考方案1】:对于控制器的 self.view,您不应将 translatesAutoresizingMaskIntoConstraints 设置为 NO。如果删除该行,则您拥有的约束应该足够了。顺便说一句,格式字符串中不需要零(尽管它们也没有伤害),
这个"H:|[webView]|"
等同于这个"H:|-0-[webView]-0-|"
。
【讨论】:
以上是关于使用自动布局以编程方式创建视图层次结构的主要内容,如果未能解决你的问题,请参考以下文章
我们可以将具有自动布局的 XIB 加载为以编程方式创建的没有自动布局的视图的子视图,并使用父视图调整子视图的大小吗?