我的UITableViewCell具有以下布局:

ios - 自动布局:无法弄清楚如何解决与在UITableViewCell内扩展面板有关的警告-LMLPHP

布局包含两个子视图:


TopView(包含Show按钮)
BottomView(按下Show按钮时将展开或折叠)。


BottomView由3个子视图组成。这些子视图的约束是:


三个子视图中的每个子视图均包含一个UILabel,该leading固定为toptrailingUILabel边,且常数== 8。
使用大于等于8的约束将UIView固定到UILabel的底部。这将强制UIView对准UIViews的顶部。
三个BottomView中最左边的一个固定在UIViews的前沿。
三个BottomView中最右边的一个固定在UIViews的后沿
三个BottomView的每个都固定在UIViews的顶部
三个BottomView的每个都固定在BottomView的底部
这三个视图具有相等的宽度和相等的高度。
UITableViewCell的底部固定到BottomView内容视图的底部


这给了我我想要的布局:

ios - 自动布局:无法弄清楚如何解决与在UITableViewCell内扩展面板有关的警告-LMLPHP

我要完成的工作如下:


最初,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除外:

ios - 自动布局:无法弄清楚如何解决与在UITableViewCell内扩展面板有关的警告-LMLPHP

并将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

07-27 19:02