首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITableView.RectForHeaderInSection导致“请求无效部分”的异常,为什么?

UITableView.RectForHeaderInSection导致“请求无效部分”的异常,为什么?
EN

Stack Overflow用户
提问于 2013-08-15 20:47:21
回答 1查看 2K关注 0票数 0

除了在UITableView类中已经可用的标头之外,我目前还在为UITableView实现自定义标题(这样我们就可以同时在顶部浮动一个标题标题和一个字幕标题)。

为了做到这一点,我的表被分成许多部分,这些部分可以是:

  • 标题部分,它实际上是一个以空UIView作为标题的部分(因为我希望我的自定义标题浮动在那个空视图上)。
  • 或者它可以是一个副标题部分,这是一个正常的部分,它使用了iOS提供的标题(当我们滚动时,这个标题已经浮在顶部)。

这两种类型的部分都可以在其中包含行,并且实现可以很好地工作,直到我尝试使用2个自定义标头。

当我尝试添加第二个自定义标头时,当我调用UITableView.RectForHeaderInSection方法时会得到这个异常:

NSInternalInconsistencyException:在无效的第(6)节中请求重排标头

问题是我调用了this.UITableView.RectForHeaderInSection(6),当异常弹出(在完全相同的行上)时,我可以看到我的表至少有7个部分,因此,第6节不应该是无效的。

我正在使用RectForHeaderInSection将我的浮动头放置在它应该在的位置。

有人知道为什么它会崩溃,即使这个部分不应该是无效的?或者另一种方法来获得我需要放置浮动标题的确切框架(这将是我在标题部分中创建的空表视图标题的框架)?

我只找到了这个可能与我的问题相关的question,但我认为在这种情况下,问题的根源并不相同。

编辑:我意识到,当我说节的数量应该是7,这是UITableViewSource子类中的节数,而不是表中的“实际”节数。即使将部分添加到源中,也有可能删除或根本不添加该部分吗?除了查看源代码中的列表外,我还能看到表中的节数吗?

我明天可能会发布代码的一部分,因为现在我意识到没有足够的信息来找出问题所在。

编辑2:代码如下所示:

代码语言:javascript
复制
// first we create the custom header (Title)
var title1 = new CustomHeader();

var section1 = this.Table.TableSource.AddSection();
section1.HeaderView = title1.View;
// Fill section 1 with rows...
var section2 = this.Table.TableSource.AddSection();
// Fill section 2 with rows...

// We create the list of sections that our Title will contain
var title1Sections = new List<TableSection>();
title1Sections.Add(section1);
title1Sections.Add(section2);

// Now we call the method that will create our custom header
this.Table.TableSource.AddHeader(title1.View, title1Sections, this.Table.TableSource.Sections.IndexOf(section1);

因此,我们有第1节,它有一个自定义标题标题,浮动在第1节和第2节。第2节,它有一个正常的字幕标题,当它们撞到对方时,它会在标题标题下浮动。现在使用AddHeader方法:

代码语言:javascript
复制
public void AddHeader(UIView headerView, List<TableSection> sections, int indexOfFirstSection)
{
    RectangleF rectForHeaderInTableView = this.TableView.RectForHeaderInSection(indexOfFirstSection); /* CRASHES HERE */
    // Code that uses rectForHeaderInTableView to make our custom header float over everything...
}

如果我只有一个这样的自定义标题,应用程序运行良好,没有崩溃。但是,如果我添加更多的部分(比如第3-4节),就像我在这里添加自定义头一样,当它尝试添加第二个自定义标头时,应用程序在尝试获取rectForHeaderInSection时会崩溃。如果我决定不为第1-2节有一个自定义的标题,而是有一个3-4,它仍然有效。只要我只有一个自定义标题,应用程序就不会崩溃。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-26 17:55:00

您是对的,“是否有可能删除部分,或者即使将它们添加到源中,也不会添加它们?”它们没有加在桌子上。

你必须打电话:

代码语言:javascript
复制
ReloadData() 

在tableView上同步源和表的数据,以防止无效的节索引。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18261540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档