使用“自动布局”以编程方式创建视图层

时间:2014-10-28 14:45:00

标签: ios objective-c autolayout

我想使用自动布局以编程方式创建视图层次结构层次结构具有以下结构: UIView - > UIWebView的 我想在UIView的底部为UIToolbar留出一些空间。

结果应该与此xib文件中一样: enter image description here

到目前为止

代码:

- (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 个答案:

答案 0 :(得分:1)

你不应该为控制器的self.view设置translatesAutoresizingMaskIntoConstraints为NO。如果删除该行,则您的约束应该足够。顺便说一下,您的格式字符串中不需要零(尽管它们也不会受到伤害),

"H:|[webView]|"相当于此"H:|-0-[webView]-0-|"