Ios 从XIB加载的UITableView节标题有时显示不正确
我已经创建了一个带有UIView的自定义XIB文件,我希望将其显示在Ios 从XIB加载的UITableView节标题有时显示不正确,ios,objective-c,uitableview,xib,sectionheader,Ios,Objective C,Uitableview,Xib,Sectionheader,我已经创建了一个带有UIView的自定义XIB文件,我希望将其显示在UITableView中,作为节中标题的视图。我正确地实现了所需的委托方法,当然: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection: (NSInteger)section { if (tableView == self.messageTableView) { TableViewHeaderView *head
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视图有时会错误地显示,如下图所示。由于我在这个论坛的新帐户,我无法将图片直接粘贴到这个帖子中。但您可以使用该链接(很抱歉):
在本例中,UITableView
有八个部分。正如您可以清楚地看到的,sectionheader视图“Sending 3,4,5”完全放错了位置。当滚动tableview时,它们会停留在自己的位置并移动。但是,当您向下滚动tableview时,它们将再次出现在正确的位置
顺便说一句:我在这个项目中不使用自动布局,视图的高度正确,对应于heightForHeaderInSection:
delegate方法,并且与基础tableview本身的宽度相同。HeaderView和基础UITableView的自动大小设置为:
重新加载tableview也没有帮助
有人知道那里出了什么问题吗?我一点也不知道。或者这种使用自定义视图的方法有点过时了
谢谢你的帮助 我想我已经弄明白了,不过这是一个相当个别的错误 在某些情况下,对相关的
UITableView
对象调用reloadSections:withRowAnimation:
方法时发生错误。使用reloadData
解决了这个问题
这个错误本身很难解释,因为这意味着要解释相关应用程序实现的很大一部分。无论如何,我认为这是由于在短时间内执行了大量后续的reloadSections:withRowAnimation:
与reloadData
方法调用混合在一起造成的。当通过UDP套接字接收到新数据时,以及当用户同时手动执行tableview重新加载时(在tableview上使用筛选器时-视图底部的按钮用于此操作),我的应用程序对重新加载节:withRowAnimation:
方法有几个异步调用这实际上可能会引起问题
我认为一些已经创建的Sectionheader视图对象可能不会被清理,因此它们仍然停留在superview上。我不确定这是否是正确的解释,但问题至少得到了解决:)我会尝试在该委托方法中设置断点,并检查该标题视图的框架。好的,我会尝试一下,但如前所述,错误是随机发生的。可能会有点大