在iOS 7和iOS 8上使用AutoLayout调整UITableViewCell的大小

时间:2014-09-13 20:00:39

标签: ios uitableview ios7 autolayout ios8

我想在选择UITableViewCell时调整其大小。在iOS 7中,我设计了两个不同高度的表格视图单元格,并在选中时将其替换为另一个:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // ...

    [self.tableView beginUpdates];
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [self.tableView endUpdates];

    // ...

}

我相应地设置了高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([self.tableView.indexPathForSelectedRow isEqual:indexPath]) {
        return 163.0f;
    }
    else {
        return 60.0f;
    }
}

问题: 在iOS 8上选择行时,它将加载新单元格但不会更改单元格的高度。相反,它会破坏我的一个约束,强制执行系统"<NSLayoutConstraint:0x7f9fdb72b1f0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f9fdb7009f0(60.6667)]>"约束。

我的第一个解决方案是使用- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath而不是- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath,但这在iOS 7上无效。

实现这两种方法都不会在任何一种操作系统上产生预期的结果。

0 个答案:

没有答案