从 XIB 加载的 UITableView Sectionheader 有时显示不正确
Posted
技术标签:
【中文标题】从 XIB 加载的 UITableView Sectionheader 有时显示不正确【英文标题】:UITableView Sectionheader loaded from XIB sometimes gets displayed incorrectly 【发布时间】:2013-10-11 23:43:57 【问题描述】:我创建了一个带有 UIView 的自定义 XIB 文件,我希望将其显示在 UITableView
中,作为部分标题的视图。当然,我正确地实现了所需的委托方法:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:
(NSInteger)section
if (tableView == self.messageTableView)
TableViewHeaderView *header = [[[NSBundle mainBundle]
loadNibNamed:@"TableViewHeaderView" owner:self options:nil] lastObject];
[header.titleLabel setText:@"A String"];
[header.addressLabel setText:@"Another String"];
[header sizeToFit]; //I tried it with and without this line,
// does not seem to help
return header;
return nil;
因此TableViewHeaderView
类是UIView
的子类。
一切似乎都运行良好,实际上我在其他一些项目中也使用了这种方法,而且一切似乎都运行良好。尽管如此,我还是遇到了一个非常奇怪且随机的错误:运行应用程序并使用 Tableview 的数据,一些 Sectionheader-Views 有时会像下面的屏幕一样显示不正确。由于我在此论坛中的新帐户,我无法将图片直接粘贴到此帖子中。但您可以改用该链接(对此感到抱歉):
http://i.stack.imgur.com/JSeVz.png
在此示例中,UITableView
有八个部分。正如您可以清楚地看到,sectionheader-views “Sending 3,4,5”完全放错了位置。当滚动表格视图时,它们会被固定在它们的位置并移动。但是,当您向下滚动表格视图时,它们将再次出现在正确的位置。
顺便说一句:我在这个项目中没有使用AutoLayout,视图有一个正确的高度,对应heightForHeaderInSection:
委托方法,和底层tableview本身的宽度相同。 HeaderView 以及底层 UITableView 的 Autosizing 设置为:
http://i.stack.imgur.com/Ms0ZC.png
重新加载 tableview 也无济于事。
有人知道那里出了什么问题吗?我一点头绪都没有。还是这种使用自定义视图的方法有点过时?
感谢您的帮助!
【问题讨论】:
我会尝试在该委托方法中放置一个断点并检查该标题视图的框架。 好的,我会试一试,但正如已经提到的,错误是随机发生的。可能会有点广泛 【参考方案1】:我想我明白了,不过这是一个相当个人的错误。
在相关UITableView
对象上调用reloadSections:withRowAnimation:
方法时,在某些情况下会发生错误。使用reloadData
解决了这个问题。
错误本身很难解释,因为这意味着要解释相关应用程序实现的很大一部分。无论如何,我认为这是由于在短时间内执行大量后续的reloadSections:withRowAnimation:
和reloadData
方法调用造成的。当通过 UDP-Socket 接收新数据时,我的应用程序对 reloadSections:withRowAnimation:
方法有几个异步调用,同时用户手动执行 tableview 重新加载(在 tableview 上使用过滤器时 - 底部的按钮视图用于此)这实际上可能会导致问题。
我认为一些已经创建的 Sectionheader-views 对象可能不会被清理,因此它们仍然停留在 superview 上。我不确定这是否是正确的解释,但至少问题已解决:)
【讨论】:
以上是关于从 XIB 加载的 UITableView Sectionheader 有时显示不正确的主要内容,如果未能解决你的问题,请参考以下文章
来自 XIB 错误的 UITableView 和 UITableViewCell?
Swift 3 - 从 xib 加载的 UITableViewCell - 自动布局和高度不正确