在 iOS7 中滚动 UITableView

Posted

技术标签:

【中文标题】在 iOS7 中滚动 UITableView【英文标题】:Scroll UITableView in iOS7 【发布时间】:2013-09-19 16:02:13 【问题描述】:

有人知道如何在 ios7 上滚动 UITableView 吗?

我曾经使用过这段代码,它工作得很好,但现在似乎 contentSize 发生了一些变化(我在 textView 上遇到了这样的问题)

[self.tableView scrollRectToVisible:CGRectMake(0, 0, self.tableView.contentSize.width, self.tableView.contentSize.height) animated:YES]

编辑:

我的代码是这样的

viewDidLoad:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

keyboardWillShow:

[self.tableView scrollRectToVisible:CGRectMake(0.0, self.tableView.contentSize.height - 1.0, 1.0, 1.0) animated:NO];

错误:

键盘出现时我没有注意到滚动,因为我没有更新 contentSize。

解决方案(基于丹尼尔的回答)

CGSize size = self.tableView.contentSize;
size.height += keyboardBounds.size.height;
self.tableView.contentSize = size;

[self.tableView scrollRectToVisible:CGRectMake(0.0, self.tableView.contentSize.height - 1.0, 1.0, 1.0) animated:NO];

【问题讨论】:

运行该代码时发生了什么/没有发生什么? 好的,但什么也不定义。当你在桌子的顶部时,你会运行它吗?还是滚动浏览?内容大小是多少?显然,正在发生的事情与您期望发生的事情之间存在差异。但是说“它没有做我想要的”是没有帮助的。 【参考方案1】:

理论上你的代码不应该做任何事情。您正在滚动到一个矩形,它是 tableview 内容的大小!

因为您使用的矩形已经可见,因为它基本上是整个表格视图。

如果你想滚动到底部,你应该这样做:

[self.tableView scrollRectToVisible:CGRectMake(0.0, 
                                               self.tableView.contentSize.height - 1.0, 
                                               1.0, 
                                               1.0) 
                           animated:YES];

【讨论】:

滚动到底部是你想要做的吗?请确保您在 viewDidLoad 之后调用它,并且一切都按您的预期设置。也许你打电话太早了。【参考方案2】:

TableView 有不同的滚动方式

[self.tableView scrollToRowAtIndexPath:desireRowIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

要查看更多详细信息,请查看this

【讨论】:

以上是关于在 iOS7 中滚动 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS7 中滚动 UITableView

iOS7,渐变作为背景在表格视图中滚动

ScrollView 在 IOS7 上不滚动

在iOS7中具有固定页眉和页脚的网页上的滚动问题

删除不需要的 ios7 填充

在 ios7 上滚动 uitableview 时出现 UISearchbar (tableHeaderView) 问题