Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从XIB加载的UITableView节标题有时显示不正确_Ios_Objective C_Uitableview_Xib_Sectionheader - Fatal编程技术网

Ios 从XIB加载的UITableView节标题有时显示不正确

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

我已经创建了一个带有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视图有时会错误地显示,如下图所示。由于我在这个论坛的新帐户,我无法将图片直接粘贴到这个帖子中。但您可以使用该链接(很抱歉):

在本例中,
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上。我不确定这是否是正确的解释,但问题至少得到了解决:)

我会尝试在该委托方法中设置断点,并检查该标题视图的框架。好的,我会尝试一下,但如前所述,错误是随机发生的。可能会有点大