Ios 如何避免由invalidateIntrinsicContentSize引起的无限循环
当视图放在tableviewcell中时,此代码会导致无限循环。如何正确使用autolayout而不在此处造成无限循环Ios 如何避免由invalidateIntrinsicContentSize引起的无限循环,ios,autolayout,Ios,Autolayout,当视图放在tableviewcell中时,此代码会导致无限循环。如何正确使用autolayout而不在此处造成无限循环 @implementation SimpleStackView @synthesize rowSpacing=_rowSpacing; - (void)layoutSubviews { [super layoutSubviews]; [self sizeToFit]; [self invalidateIntrinsicContentSize];
@implementation SimpleStackView
@synthesize rowSpacing=_rowSpacing;
- (void)layoutSubviews
{
[super layoutSubviews];
[self sizeToFit];
[self invalidateIntrinsicContentSize];
CGFloat nextRowTop = 0;
for (UIView *view in self.subviews)
{
CGSize size = [view sizeThatFits:CGSizeMake(self.bounds.size.width, view.bounds.size.height)];
view.frame = CGRectMake(0, nextRowTop, self.bounds.size.width, size.height);
nextRowTop += view.frame.size.height + self.rowSpacing;
}
}
- (CGSize)sizeThatFits:(CGSize)size
{
CGFloat sumOfHeights = 0;
for (UIView *view in self.subviews) {
sumOfHeights += [view sizeThatFits:CGSizeMake(size.width, view.bounds.size.height)].height;
}
CGFloat sumOfRowSpacings = MAX(0, (int)self.subviews.count - 1) * self.rowSpacing;
return CGSizeMake(size.width, sumOfHeights + sumOfRowSpacings);
}
- (CGSize)intrinsicContentSize
{
CGFloat intrinsicHeight = [self sizeThatFits:self.bounds.size].height;
return CGSizeMake(UIViewNoIntrinsicMetric, intrinsicHeight);
}
@end
如果你正确地使用自动布局,你不应该做任何这些。我建议您阅读一些有关自动布局的文档/教程。此外,代码顶部的@implementation表示SimpleStackView。如果你使用的是UIStackView,你绝对不应该这样做。谢谢你写信给我。我使用这个SimpleStackView类的原因是我支持iOS 7,所以不能使用UIStackView。SimpleStackView只是一个直接UIView子类。我发表了关于同样问题的文章,但我可能已经长篇大论了,这就是我再次发表文章的原因。我认为我正确地使用了自动布局,但在这个类中,我不使用自动布局,因为这种方式比在这种情况下使用约束要短得多,也更干净。我建议您考虑一下,如果您想要这种功能,但需要支持旧版本的iOS。我在当前的项目中广泛使用它,它工作得非常好。如果你正确地使用自动布局,你不应该做任何这些。我建议您阅读一些有关自动布局的文档/教程。此外,代码顶部的@implementation表示SimpleStackView。如果你使用的是UIStackView,你绝对不应该这样做。谢谢你写信给我。我使用这个SimpleStackView类的原因是我支持iOS 7,所以不能使用UIStackView。SimpleStackView只是一个直接UIView子类。我发表了关于同样问题的文章,但我可能已经长篇大论了,这就是我再次发表文章的原因。我认为我正确地使用了自动布局,但在这个类中,我不使用自动布局,因为这种方式比在这种情况下使用约束要短得多,也更干净。我建议您考虑一下,如果您想要这种功能,但需要支持旧版本的iOS。我在我当前的项目中广泛使用它,它工作得非常好。