【问题标题】:Change UITableViewCell Height on Orientation Change在方向更改时更改 UITableViewCell 高度
【发布时间】:2010-04-27 01:36:33
【问题描述】:

我有一个包含可变高度 UILabel 的单元格的 UITableView。我能够计算标签需要使用的最小高度sizeWithFont:constrainedToSize:lineBreakMode:,这在第一次加载表格视图时工作正常。当我旋转表格视图时,单元格变得更宽(意味着显示内容所需的行更少)。有什么方法可以让 UITableView 在方向更改动画期间或之前或之后重新确定单元格的高度?谢谢。

【问题讨论】:

  • 如何获得用于 sizeWithFont:constrainedToSize:lineBreakMode: 的尺寸(宽度)?我正在尝试制作一个适用于普通和分组 tableview 样式的可变高度单元格,但无法弄清楚如何获得分组 tableview 的宽度

标签: uitableview resize orientation


【解决方案1】:

您的 UITableViewController 可以实现 tableView:heightForRowAtIndexPath: 方法来指定特定行的行高,它可以查看当前方向 ([[UIDevice currentDevice] orientation]) 来决定返回什么高度。

为确保在方向更改时再次调用 tableView:heightForRowAtIndexPath:,您可能需要 检测this question中描述的方向变化,并调用[tableView reloadData]

【讨论】:

  • 我目前已经实现了tableView:heightForRowAtIndexPath:,我没有看到它在方向变化时被调用,但它确实在reloadData 上被调用,我可以检测到方向变化。如果可能的话,我希望在视图旋转时设置高度动画,但我不认为这是一种可能性。
  • 根据这个问题:stackoverflow.com/questions/460014/… 你也许可以通过使用beginUpdates/endUpdates 而不是reloadData 来制作动画
  • 效果很好,大卫,谢谢。我将此代码放在-didRotateFromInterfaceOrientation 中,效果很好。现在它旋转然后调整大小。我将寻找一种更好的方法来放置它,看看是否可以让它在旋转时调整大小。
【解决方案2】:

要稍微改进@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;
    }
}

【讨论】:

  • 谢谢!我快疯了!当您第一次初始化应用程序时,知道为什么 statusBarOrientation 起作用而单独的方向不起作用吗?一旦运行,方向改变,两者都可以正常工作。
  • UIDevice 方向和 UIInterface 方向(来自状态栏)不一样。 UIDevice 可能在 UIDeviceOrientationFaceUp 中(即你的 iPad 平放在桌子上)——它不会告诉你界面的方向是什么,可能是 4 个中的任何一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多