Ios 如何避免由invalidateIntrinsicContentSize引起的无限循环

Ios 如何避免由invalidateIntrinsicContentSize引起的无限循环,ios,autolayout,Ios,Autolayout,当视图放在tableviewcell中时,此代码会导致无限循环。如何正确使用autolayout而不在此处造成无限循环 @implementation SimpleStackView @synthesize rowSpacing=_rowSpacing; - (void)layoutSubviews { [super layoutSubviews]; [self sizeToFit]; [self invalidateIntrinsicContentSize];

当视图放在tableviewcell中时,此代码会导致无限循环。如何正确使用autolayout而不在此处造成无限循环

@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。我在我当前的项目中广泛使用它,它工作得非常好。