小编Alv*_*vin的帖子

自动布局会导致无限的layoutSubviews循环

我真的很困惑,当我在子视图上使用自动布局时,layoutSubview方法无限循环.

我所做的只是:

- (id)init
{
    self = [super init];
    if(self)
    {
        self.backgroundColor = [UIColor grayColor];
        _imageView = [[UIImageView alloc] init];
        _imageView.translatesAutoresizingMaskIntoConstraints = NO;
        [self addSubview:_imageView];

        [self applyConstraints];

    }
    return self;
}

-(void)applyConstraints
{
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_imageView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_imageView)]];
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_imageView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_imageView)]];
}
Run Code Online (Sandbox Code Playgroud)

这会在layoutSubviews中导致无限循环.实际上,即使没有调用applyConstraints,也会发生循环,阻止它发生的唯一方法是将'translatesAutoresizingMaskIntoConstraints'设置为YES.

有没有人遇到/解决过这个问题?

更新 只是为了澄清,这是一个UIView子类,在视图控制器中使用.视图本身不使用自动布局,而是在初始化后将帧设置为旧式.

objective-c infinite-loop ios layoutsubviews autolayout

3
推荐指数
2
解决办法
6039
查看次数