固定高度子视图的Autolayoutconstraint警告

时间:2014-05-08 10:15:01

标签: ios uitableview autolayout nslayoutconstraint nsautolayout

我使用UIView+Autolayout来简化基于代码的自动布局约束创建,但是我在向UITableViewCell子类添加约束时遇到了麻烦。

我在单元格中有一个子视图(" viewUser"),用于分组有关谁发布了单元格中显示的其他内容的联系信息。 " viewUser"是一个固定的高度,并始终位于单元格的底部:

enter image description here

为了在init方法中实现这一点,我创建了" viewUser"并将其添加到单元格的contentView:

self.viewUser = [UIView newAutoLayoutView];

[self.contentView addSubview:self.viewUser];

并在updateConstraints方法中添加以下约束:

[self.viewUser autoSetDimension:ALDimensionHeight toSize:kContentHeight];
[self.viewUser autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:0.0f];
[self.viewUser autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0.0f];
[self.viewUser autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0.0f];
[self.viewUser autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0.0f];

当我创建单元格时,我在控制台中收到以下警告:

    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)  (
    <NSAutoresizingMaskLayoutConstraint:0xb2a6b40 h=--& v=--& V:[UITableViewCellContentView:0xb289e20(44)]>",
    "<NSLayoutConstraint:0xb2a3360 V:[UIView:0xb2a5fd0(53)]>",
    "<NSLayoutConstraint:0xb2a3420 V:|-(0)-[UIView:0xb2a5fd0]   (Names: '|':UITableViewCellContentView:0xb289e20 )>",
    "<NSLayoutConstraint:0xb2a3840 UIView:0xb2a5fd0.bottom == UITableViewCellContentView:0xb289e20.bottom>" )

Will attempt to recover by breaking constraint  <NSLayoutConstraint:0xb2a3360 V:[UIView:0xb2a5fd0(53)]>

对我来说这是有道理的,因为我说的是&#34; viewUser&#34;应该有一个固定的高度,然后我将它固定到contentView的边缘,但如果我删除:

[self.viewUser autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:0.0f];

当我在tableview控制器中计算出单元格的动态高度时,它的高度会回到0。

我无法弄清楚我做错了什么以及我如何删除此警告并获得单元格的高度,任何见解都会很棒。

1 个答案:

答案 0 :(得分:1)

如果不知道细胞的整个布局,很难诊断出您的问题。最有可能的是,您在

中返回了错误的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

您返回的高度太小,无法同时使用&#34; viewUser&#34;和上面的内容子视图。

如果你&#34; viewUser&#34;正在消失,我现在可以想到的两种情况可能是因为你的桌子高度太小了。:

  1. 您自动破坏了viewUser的高度限制 运行时由于约束冲突。这就是发生的事情 您发布的警告:您的viewUser的单元格高度太小(44) 身高(53)

  2. 您查看用户的身高会被更高的优先级取代 可能来自内容视图的约束。这不太可能,但也有可能。