UITableView动态高度不能满足约束

时间:2015-10-27 17:55:29

标签: ios objective-c uitableview autolayout nslayoutconstraint

我尝试使用autolayout动态确定我的表格单元格的高度使用本教程http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout

问题是,我得到了这些奇怪的自动约束,将维度设置为我的自定义单元格的模拟指标。我做了很多自动布局,我认为模拟的指标不应该在运行时影响实际的应用程序。新SDK中有什么变化吗?

无论如何,这是我一直在搞乱的方法......

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
            static JMSocialFeedTableViewCell *sizingCell = nil;
            static dispatch_once_t onceToken;
            dispatch_once(&onceToken, ^{
                    sizingCell = [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
            });
           [self configureCell:sizingCell forIndexPath:indexPath];

           //[sizingCell.contentView addConstraint:[NSLayoutConstraint constraintWithItem:sizingCell.contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:0 constant:self.tableView.frame.size.width]];

           [sizingCell setNeedsLayout];
           [sizingCell layoutIfNeeded];

           //CGSize size = [sizingCell.contentView sizeThatFits:CGSizeMake(self.tableView.frame.size.width, CGFLOAT_MAX)];
           CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
           return size.height + 1.0f; // Add 1.0f for the cell separator height
    }

注释掉的线条是我尝试的不同的东西。我的模拟指标是300 x 389.即使表格视图宽度为320,sizeThatFits方法也会返回此大小。无论出于何种原因,systemLayoutSizeFittingSize返回400 x 489。在这些情况下,我很容易理解为什么我会得到不可满足的约束,因为高度应该是409(对于分隔符而言,+ 1.0F也许。我一直在尝试使用和不使用它)。

我没有在代码中设置任何其他约束,但如果我尝试添加我在上面的代码中评论的那个,我就会得到这个奇怪的约束......

    "<NSLayoutConstraint:0x1701ebf0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x1705a310(300)]>"

我不知道为什么数字300不断出现。我认为一旦视图布局,模拟指标就会消失。

很抱歉,如果我的问题没有100%明确。我想我在几点上感到困惑。基本上我试图通过自动布局来确定我的单元格的正确高度,因为单元格的宽度应该等于表格视图的宽度(在设备I上测试的是320)上)。

0 个答案:

没有答案