iOS autoLayout视图未在屏幕上显示?

时间:2016-08-01 17:53:33

标签: ios objective-c autolayout

当我使用initWithFrame时,一切都很好。但我的主管建议autoLayout通常是一种更好的做法。所以我尝试向imageView添加4个约束,当我在模拟器上运行它时,突然它不会出现在我的屏幕上。

- (UIImageView *) titleImage
{
    if (!_titleImage){
        _titleImage =[[UIImageView alloc] init];
        _titleImage.image = [UIImage imageNamed:@"Example.png"];

        [self.view addConstraint:
         [NSLayoutConstraint constraintWithItem:_titleImage
                attribute:NSLayoutAttributeTop
                relatedBy:NSLayoutRelationEqual
                toItem:self.view
                attribute:NSLayoutAttributeTop
                multiplier:1.0
                constant:100]];
        [self.view addConstraint:
         [NSLayoutConstraint constraintWithItem:_titleImage
                attribute:NSLayoutAttributeLeading
                relatedBy:NSLayoutRelationEqual
                toItem:self.view
                attribute:NSLayoutAttributeLeading
                multiplier:1.0
                constant:100]];
        [self.view addConstraint:
         [NSLayoutConstraint constraintWithItem:_titleImage
                attribute:NSLayoutAttributeTrailing
                relatedBy:NSLayoutRelationEqual
                toItem:self.view
                attribute:NSLayoutAttributeTrailing
                multiplier:1.0
                constant:-100]];
        [self.view addConstraint:
         [NSLayoutConstraint constraintWithItem:_titleImage
                attribute:NSLayoutAttributeBottom
                relatedBy:NSLayoutRelationEqual
                toItem:self.view
                attribute:NSLayoutAttributeBottom
                multiplier:1.0
                constant:-100]];
    }
    return _titleImage;
}

然后在loadView方法中我有......

[self.view addSubview:self.titleImage];

当我刚使用initWithFrame xywidthheight时,它运行正常。我删除了该行并添加了4个约束,现在我无法将其显示在屏幕上。

1 个答案:

答案 0 :(得分:2)

  1. 在添加约束之前,您应该将_titleImage添加为子视图。
  2. 在您使用AutoLayout的任何视图上,您​​必须致电:

    [_titleImage setTranslatesAutoresizingMaskIntoConstraints:NO];