4

サブビューで自動レイアウトを使用すると、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)]];
}

これにより、layoutSubviews で無限ループが発生します。実際には、applyConstraints が呼び出されない場合でもループが発生します。これを停止する唯一の方法は、'translatesAutoresizingMaskIntoConstraints' を YES に設定することです。

以前にこの問題に遭遇した/解決した人はいますか?

更新 明確にするために、これはビューコントローラー内で使用される UIView サブクラスです。ビュー自体は自動レイアウトを使用しません。代わりに、フレームは初期化後に昔ながらの方法で設定されます。

4

3 に答える 3

0

これは、2 つの未決定の大/小方程式など、あいまいさがある場合にも表示されます。これらの制約の 1 つを直接等価に変更する必要があります。また、トレースによってこのあいまいさを検出してみてください。

于 2015-08-26T14:07:26.420 に答える