Ios 自动布局导致无限布局子视图循环
我真的很困惑,当我在子视图上使用自动布局时,layoutSubview方法会无限循环 我所做的就是:Ios 自动布局导致无限布局子视图循环,ios,objective-c,autolayout,infinite-loop,layoutsubviews,Ios,Objective C,Autolayout,Infinite Loop,Layoutsubviews,我真的很困惑,当我在子视图上使用自动布局时,layoutSubview方法会无限循环 我所做的就是: - (id)init { self = [super init]; if(self) { self.backgroundColor = [UIColor grayColor]; _imageView = [[UIImageView alloc] init]; _imageView.translatesAutoresizing
- (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)]];
}
这会导致LayoutSubView中出现无限循环。实际上,即使没有调用applyConstraints,循环也会发生,阻止它发生的唯一方法是将“TranslatesAutoResizengMaskinToConstraints”设置为“是”
以前有人遇到/解决过这个问题吗
更新
只是澄清一下,这是一个UIView子类,在视图控制器中使用。视图本身不使用自动布局,而是在初始化后以旧式方式设置其框架。循环是由一个超级视图引起的,该超级视图正在删除其子视图,设置其(可能是新的)框架,然后重新添加它们。由于这段代码完全没有必要,我将其删除,从而解决了问题。这可能会对您有所帮助 将调用布局子视图
- 当视图的框架发生变化时
- 从superview中删除视图后,将在superview上调用该视图
- 在UIScrollview中,在滚动期间
- 将视图添加到superView时
- 在方向改变的过程中
translatesAutoresizingMaskIntoConstraints
,但它仍然工作正常,layoutSubview没有被无限调用。我现在已经使用框架解决了这个问题,当我开始讨论这个问题时,我会尝试在一个空的项目中重现这个问题,然后更新这个问题。同时,你知道是什么导致了无限循环吗?我在任何地方都找不到关于无限布局子视图循环的任何内容。你是对的,它是由其他地方引起的。已删除其中一个SuperView并在其layoutSubviews方法中重新添加子视图。我不知道为什么,因为这是完全没有必要的……很好,你解决了这个问题。:)事实上,更改框架并不是问题,但创建新的UIVIEW并将其添加到viewcontrollers视图会使DidLayoutSubView再次被调用。你的权利,这段代码是不必要的,不需要删除和重新创建,只需要重用。