iphone – 如何滚动UITableView到不包含行的部分?

在我正在开发的应用程序中,我有一个简单的样式UITableView,可以包含一个包含零行的部分。我想能够滚动到这一部分使用scrollToRowAtIndexPath:atScrollPosition:animated:但我得到一个错误,当我试图滚动到此部分由于缺乏子行。

苹果的日历应用程序能够做到这一点,如果你在列表视图中查看您的日历,并且今天的日历中没有事件,今天插入一个空白部分,您可以使用工具栏中的今天按钮滚动到它在屏幕的底部。据我可以告诉苹果可能正在使用一个自定义的UITableView,或者他们使用的私人API …

唯一的解决方法,我可以想到的是插入一个空的UITableCell在0像素高,滚动到那。但是我的理解是,具有不同高度的单元格真的不好滚动性能。仍然我会尝试它,无论如何,也许性能打击不会太糟糕。

更新

因为似乎没有解决方案,我已经提交了一个bug报告与苹果。如果这也影响到你,提交一个重复的rdar://问题/ 6263339(Open Radar link)如果你想让这个固定更快。

更新#2

我有一个体面的解决方法,这个问题,看看我的答案下面。

更新:看起来这个bug在iOS 3.0中是固定的。您可以使用以下NSIndexPath滚动到包含0行的部分:

[NSIndexPath indexPathForRow:NSNotFound inSection:section]

我将离开我原来的解决方法这里的任何人仍然保持项目使用2.x SDK。

找到了一个体面的解决方法:

CGRect sectionRect = [tableView rectForSection:indexOfSectionToScrollTo];
[tableView scrollRectToVisible:sectionRect animated:YES];

上面的代码将滚动tableview,所以所需的部分是可见的,但不一定在可见区域的顶部或底部。如果你想滚动所以部分在顶部做这:

CGRect sectionRect = [tableView rectForSection:indexOfSectionToScrollTo];
sectionRect.size.height = tableView.frame.size.height;
[tableView scrollRectToVisible:sectionRect animated:YES];

根据需要修改sectionRect,将所需的部分滚动到可见区域的底部或中间。

http://stackoverflow.com/questions/159821/how-do-i-scroll-a-uitableview-to-a-section-that-contains-no-rows

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – 如何滚动UITableView到不包含行的部分?