自动布局:删除视图时相邻视图的后备约束
Autolayout: Fallback constraints for neighbouring views when removing a view
我正在尝试在 UICollectionReusableView (UICollectionView Header) 上下文中进行这项工作。
计算UILabelsA、B、C中字符串要求的高度并像这样设置为灰色视图的高度:
- (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 A 和 C 有 8 点的后备垂直约束。
我只能想到 2 种可能的(不确定是对还是错)方法来实现这一目标。
- 在
collectionView:viewForSupplementaryElementOfKind:atIndexPath:
的代码中以编程方式应用新的后备布局。
- 在情节提要中设置常量 8 和更低优先级的约束。
实现此目标的正确或最佳方法是什么?我已经看到了一个答案 here 但如果有的话,我想收集更有力的意见。
提前致谢!
在A和B之间取一个B的高度约束和垂直space的IBOutlet并将其更改为0而不是删除视图
希望这能解决您的问题
我正在尝试在 UICollectionReusableView (UICollectionView Header) 上下文中进行这项工作。
计算UILabelsA、B、C中字符串要求的高度并像这样设置为灰色视图的高度:
- (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 A 和 C 有 8 点的后备垂直约束。
我只能想到 2 种可能的(不确定是对还是错)方法来实现这一目标。
- 在
collectionView:viewForSupplementaryElementOfKind:atIndexPath:
的代码中以编程方式应用新的后备布局。 - 在情节提要中设置常量 8 和更低优先级的约束。
实现此目标的正确或最佳方法是什么?我已经看到了一个答案 here 但如果有的话,我想收集更有力的意见。
提前致谢!
在A和B之间取一个B的高度约束和垂直space的IBOutlet并将其更改为0而不是删除视图
希望这能解决您的问题