我有一个包含可变高度UILabel的UITableView。我能使用sizeWithFont:constrainedToSize:lineBreakMode:
计算标签所需的最小高度,当表视图首次加载时可以正常工作。但是当我旋转表视图时,单元格变得更宽(意味着需要较少的行来显示内容)。是否有任何方法让UITableView在方向更改动画期间或立即在其前后重新确定单元格的高度?谢谢。
我有一个包含可变高度UILabel的UITableView。我能使用sizeWithFont:constrainedToSize:lineBreakMode:
计算标签所需的最小高度,当表视图首次加载时可以正常工作。但是当我旋转表视图时,单元格变得更宽(意味着需要较少的行来显示内容)。是否有任何方法让UITableView在方向更改动画期间或立即在其前后重新确定单元格的高度?谢谢。
您的UITableViewController可以实现tableView:heightForRowAtIndexPath:
方法来指定特定行的行高,并且可以查看当前方向([[UIDevice currentDevice] orientation]
)来决定返回什么高度。
为了确保tableView:heightForRowAtIndexPath:
在方向更改时再次被调用,您可能需要检测方向更改,如此问题所述,并调用[tableView reloadData]
。
tableView:heightForRowAtIndexPath:
,我没有看到它在方向改变时被调用,但是它会在 reloadData
时被调用,我可以检测到方向的改变。如果可能的话,我希望高度能够随着视图旋转而动画化,但我并没有看到这种可能性。 - Peter ZichbeginUpdates
/endUpdates
来执行动画,而不是使用 reloadData
。 - David Gelhar-didRotateFromInterfaceOrientation
里面,它运行得很好。现在它会旋转然后调整大小。我将寻找更好的方法来实现它,并尝试让它在旋转时自动调整大小。 - Peter Zich对于上面@David的回答进行略微改进,并回答最后一条评论关于如何在旋转期间平滑地动画化它,使用以下方法:
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
当然还有高度委托方法:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
return 171.0f;
} else {
return 128.0f;
}
}