更改方向时更改 UITableViewCell 高度

发布于 2024-08-30 17:58:35 字数 210 浏览 4 评论 0原文

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

I have a UITableView with cells containing variable-height UILabels. I am able to calculate the minimum height the label needs to be using sizeWithFont:constrainedToSize:lineBreakMode:, which works fine when the table view is first loaded. When I rotate the table view the cells become wider (meaning there are fewer lines required to display the content). Is there any way I can have the height of the cells redetermined by the UITableView during the orientation change animation or immediately before or after? Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北风几吹夏 2024-09-06 17:58:35

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

为了确保在方向更改时再次调用 tableView:heightForRowAtIndexPath:,您可能需要
检测方向变化,如 这个问题,然后调用[tableView reloadData]

Your UITableViewController can implement the tableView:heightForRowAtIndexPath: method to specify the row height for a particular row, and it can look at the current orientation ([[UIDevice currentDevice] orientation]) to decide what height to return.

To make sure tableView:heightForRowAtIndexPath: gets called again when the orientation changes, you'll probably need to
detect the orientation change as described in this question, and call [tableView reloadData].

平生欢 2024-09-06 17:58:35

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

To improve slightly on the answer above from @David and to answer the last comment about how to animate it smoothly during a rotation, use this method:

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

and of course the height delegate method:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
        return 171.0f;
    } else {
        return 128.0f;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文