我的UITableViewCell
具有以下布局:
布局包含两个子视图:TopView
(包含Show
按钮)BottomView
(按下Show
按钮时将展开或折叠)。BottomView
由3个子视图组成。这些子视图的约束是:
三个子视图中的每个子视图均包含一个UILabel
,该leading
固定为top
,trailing
和UILabel
边,且常数== 8。
使用大于等于8的约束将UIView
固定到UILabel
的底部。这将强制UIView
对准UIViews
的顶部。
三个BottomView
中最左边的一个固定在UIViews
的前沿。
三个BottomView
中最右边的一个固定在UIViews
的后沿
三个BottomView
的每个都固定在UIViews
的顶部
三个BottomView
的每个都固定在BottomView
的底部
这三个视图具有相等的宽度和相等的高度。UITableViewCell
的底部固定到BottomView
内容视图的底部
这给了我我想要的布局:
我要完成的工作如下:
最初,Show
应该折叠。
单击BottomView
按钮应适当地展开或折叠bottomViewHeightConstraint
。
我设法通过创建最初被卸载的show
来做到这一点。点击bottomViewHeightConstraint
按钮可激活/禁用约束。
AnotherTableViewCell.m
-(IBAction) show
{
self.bottomViewHeightConstraint.active = !self.bottomViewHeightConstraint.active;
[UIView animateWithDuration:0.3 animations:^{
[self layoutIfNeeded];
[self.delegate cellRequiresUpdates:self];
} completion:^(BOOL finished) {
}];
}
UIViewController.m
-(void) cellRequiresUpdates:(AnotherTableViewCell *)cell
{
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
这行得通,但是由于约束不令人满意而产生了很多警告。我需要帮助,以了解我的哪些约束导致了警告。
无法满足的约束是:
UIView
== 0(需要,因为我想折叠底视图)
UIBottomView
中最左侧和最右侧BottomView
之间的高度相等(尝试停用,但警告并没有消失)
最左边的UIView底部和
BottomView
底部之间的8像素距离(尝试停用,但警告并没有消失)
最左边的UIView底部和底部之间的8像素距离
(尝试停用,但警告并没有消失)
最佳答案
可以-这可以解决您的问题。在处理类似的最新问题时,我在Apple的文档中遇到了这个问题:
注意不要认为必须全部使用1000个优先级值。实际上,优先级通常应围绕系统定义的低优先级(250),中优先级(500),高优先级(750)和所需优先级(1000)来聚集。您可能需要设定比这些值高或低一两个点的约束,以帮助防止联系。如果您要超出此范围,则可能需要重新检查布局的逻辑。
当然,在IB中创建约束时,默认情况下它们似乎使用1000。
因此,对于您的特定布局...
在底部视图中选择所有约束,但Bottom View Height Constraint
除外:
并将Priority
更改为998
然后,仅选择Bottom View Height Constraint
并将其Priority
设置为999
运行您的应用程序,并显示/隐藏您的内心深处的底视图:)
参考:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/AnatomyofaConstraint.html#//apple_ref/doc/uid/TP40010853-CH9-SW19