当前位置:  开发笔记 > IOS > 正文

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

如何解决《如何将UITableView滚动到不包含行的部分?》经验,为你挑选了1个好方法。

在我正在处理的应用程序中,我有一个简单的样式UITableView,它可以包含一个包含零行的部分.我希望能够使用scrollToRowAtIndexPath滚动到此部分:atScrollPosition:animated:但是当我尝试滚动到此部分时由于缺少子行而出现错误.

Apple的日历应用程序可以执行此操作,如果您在列表视图中查看日历,并且今天日历中没有事件,则今天会插入空白部分,您可以使用工具栏中的"今天"按钮滚动到该部分在屏幕的底部.据我所知,Apple可能正在使用自定义的UITableView,或者他们正在使用私有API ......

我能想到的唯一解决方法是在0像素高的位置插入一个空的UITableCell并滚动到那个.但我的理解是,拥有不同高度的单元格对于滚动性能来说真的很糟糕.无论如何我仍然会尝试,也许性能打击不会太糟糕.

更新

由于似乎没有解决方案,我已经向苹果公司提交了一份错误报告.如果这对您也有影响,请提交rdar:// problem/6263339(Open Radar链接)的副本,如果您希望更快地修复此问题.

更新#2

我对这个问题有一个不错的解决方法,请看下面的答案.



1> Mike Akers..:

更新:看起来这个错误已在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,将所需部分滚动到可见区域的底部或中间.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有