サブビューで自動レイアウトを使用すると、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 サブクラスです。ビュー自体は自動レイアウトを使用しません。代わりに、フレームは初期化後に昔ながらの方法で設定されます。