自动布局:删除视图时相邻视图的后备约束

Autolayout: Fallback constraints for neighbouring views when removing a view

我正在尝试在 UICollectionReusableView (UICollectionView Header) 上下文中进行这项工作。

计算UILabelsABC中字符串要求的高度并像这样设置为灰色视图的高度:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    ....
    CGFloat expectedHeightForLabelB = 0;
    if (stringB.length > 0)
    {
        expectedHeightForLabelB = 8 + calculatedRequiredHeightForStringB;
    }
    ....
    CGFloat expectedHeaderHeight = expectedHeightForLabelA + expectedHeightForLabelB + expectedHeightForLabelC + 8
    return CGSizeMake(collectionView.bounds.size.width, expectedHeaderHeight);
}

collectionView:viewForSupplementaryElementOfKind:atIndexPath:中,我有一个条件

if (stringB.length == 0)
    [headerView.labelB removeFromSuperView];

这样的话,我已经确定了灰色superview的估计动态高度。然后我想要的是 UILabels AC 有 8 点的后备垂直约束。

我只能想到 2 种可能的(不确定是对还是错)方法来实现这一目标。

实现此目标的正确或最佳方法是什么?我已经看到了一个答案 here 但如果有的话,我想收集更有力的意见。

提前致谢!

在A和B之间取一个B的高度约束和垂直space的IBOutlet并将其更改为0而不是删除视图

希望这能解决您的问题