我想在选择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上无效。
实现这两种方法都不会在任何一种操作系统上产生预期的结果。