iOS 5 UITableView 中的序列更改 - viewForHeaderInSection 和 heightForHeaderInSection 已切换

发布于 2024-12-11 01:29:03 字数 629 浏览 0 评论 0原文

哦,我真是太不幸了——iOS 5 破坏了我的应用程序。

我有一个 UITableView,在 iOS 5 之前,在序列 viewForHeaderInsection 中调用委托

  1. (这允许我动态创建我的 标题视图)
  2. heightForHeaderInSection(这使我能够 提供我刚刚检查过的 headerView 的调整高度

,并在 iOS 4.3 模拟器和 iOS 5.0 模拟器(和 iOS 5 设备)中运行该程序,并在 iOS5 中以相反的顺序调用完全相同的代码。为什么 !!!!

文档状态(对于 tableView:heightForHeadInSection:)

特殊注意事项

在 iOS 5.0 之前,表视图会自动将 tableView:viewForHeaderInSection: 返回 nil 视图的部分的标题高度调整为 0。在 iOS 中5.0 及更高版本,您必须在此方法中返回每个节标题的实际高度。”

没有任何地方表明他们已经悄悄改变了通话顺序。

我的问题:有没有人遇到过这个问题,以及解决这个问题的任何建议?我要重新编码所有内容吗?我需要一个可变高度标题,其高度只能在创建 headerView 时确定。

Oh woe is me - iOS 5 has broken my app.

I have a UITableView and prior to iOS 5, the delegates where called in the sequence

  1. viewForHeaderInsection (which allowed me to dynamically create my
    header view)
  2. heightForHeaderInSection (which allowed me to
    provide the adjusted height of the headerView

I've just checked now and run the program in the iOS 4.3 simulator and the iOS 5.0 simulator (and iOS 5 device) and the exact same code is invoked in the reverse sequence in iOS5 . WHY !!!!

The docs state (for tableView:heightForHeadInSection:)

"Special Considerations

Prior to iOS 5.0, table views would automatically resize the heights of headers to 0 for sections where tableView:viewForHeaderInSection: returned a nil view. In iOS 5.0 and later, you must return the actual height for each section header in this method."

Nowhere does it state that they've quietly changed the sequence of calls.

My Question: Has anyone come across this, and any suggestions on resolving this? Do I recode everything ? I need to have a variable height header whose height I can only determine when I've created the headerView.

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

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

发布评论

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

评论(2

可爱咩 2024-12-18 01:29:04

只需添加这样的内容即可修复它:

// iOS 5 及更高版本在返回 nil 时仍期望高度

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

// Do some check on if this section has a header
if ([navigationSections_[section] hasHeader]) {
    return 0;
} else {
    // This will use the default height
    return tableView.sectionHeaderHeight;
}

}

Just add something like this to fix it:

// iOS 5 and later still expect a height when returning nil

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {

// Do some check on if this section has a header
if ([navigationSections_[section] hasHeader]) {
    return 0;
} else {
    // This will use the default height
    return tableView.sectionHeaderHeight;
}

}

街角卖回忆 2024-12-18 01:29:03

是的,我观察到同样的行为。
您可以在 tableView:heightForHeadInSection 中创建标头视图,并在 viewForHeaderInsection 中重用它,而不是创建两次。

在 5.0 之前,如果仅在构造视图后才知道高度,则必须对 heightForRowAtIndexPathcellForRowAtIndexPath 执行类似的操作。

yes I observe the same behavior.
You create the header view in tableView:heightForHeadInSection and reuse it in viewForHeaderInsection instead of creating it twice.

Prior to 5.0, you have to do a similar thing for heightForRowAtIndexPath and cellForRowAtIndexPath if the height is known only after constructing the view.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文