iOS 5 UITableView 中的序列更改 - viewForHeaderInSection 和 heightForHeaderInSection 已切换
哦,我真是太不幸了——iOS 5 破坏了我的应用程序。
我有一个 UITableView,在 iOS 5 之前,在序列 viewForHeaderInsection 中调用委托
- (这允许我动态创建我的 标题视图)
- 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
- viewForHeaderInsection (which allowed me to dynamically create my
header view) - 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需添加这样的内容即可修复它:
// iOS 5 及更高版本在返回 nil 时仍期望高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
}
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 {
}
是的,我观察到同样的行为。
您可以在
tableView:heightForHeadInSection
中创建标头视图,并在viewForHeaderInsection
中重用它,而不是创建两次。在 5.0 之前,如果仅在构造视图后才知道高度,则必须对
heightForRowAtIndexPath
和cellForRowAtIndexPath
执行类似的操作。yes I observe the same behavior.
You create the header view in
tableView:heightForHeadInSection
and reuse it inviewForHeaderInsection
instead of creating it twice.Prior to 5.0, you have to do a similar thing for
heightForRowAtIndexPath
andcellForRowAtIndexPath
if the height is known only after constructing the view.