我有UITableViewController
一UITableViewController
似乎,如果表格有很多行(我的大约有 20 行,每行有 60 点高度,比屏幕大),当我返回时,它总是会闪烁一次垂直滚动条以显示它在表格中的位置。但是,我不希望这种情况发生,但我确实想保留滚动条,以便它在用户滚动时显示。因此,完全禁用它不是一种选择。
这是默认行为吗?我可以暂时禁用它吗?
我有UITableViewController
一UITableViewController
似乎,如果表格有很多行(我的大约有 20 行,每行有 60 点高度,比屏幕大),当我返回时,它总是会闪烁一次垂直滚动条以显示它在表格中的位置。但是,我不希望这种情况发生,但我确实想保留滚动条,以便它在用户滚动时显示。因此,完全禁用它不是一种选择。
这是默认行为吗?我可以暂时禁用它吗?
有一个更简单的解决方案,不需要避免使用UITableViewController
子类。
您可以按照 http://stackoverflow.com/users/2445863/yonosoytu 的说明进行覆盖viewDidAppear:
,但无需避免调用[super viewDidAppear:animated]
. 只需在执行此操作之前禁用垂直滚动指示器,然后再将其重新启用。
- (void)viewDidAppear:(BOOL)animated {
self.tableView.showsVerticalScrollIndicator = NO;
[super viewDidAppear:animated];
self.tableView.showsVerticalScrollIndicator = YES;
}
如果您使用的是 Interface Builder,您可以禁用您的选项Shows Vertical Indicator
并在代码中启用它,如上所示。tableView
UIViewController
为了让Cezar 的答案适用于 iOS10,我必须在重新启用滚动指示器之前添加一个(相当大的)延迟。如果有人在第二个结束之前尝试滚动,这看起来有点奇怪,因此您可以在有人滚动后立即重新启用滚动指示器。
override func viewDidAppear(_ animated: Bool) {
tableView.showsVerticalScrollIndicator = false
super.viewDidAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.tableView.showsVerticalScrollIndicator = true
}
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !tableView.showsVerticalScrollIndicator {
tableView.showsVerticalScrollIndicator = true
}
}
实际上,考虑一下,您甚至不需要延迟,只需这样做:
override func viewDidAppear(_ animated: Bool) {
tableView.showsVerticalScrollIndicator = false
super.viewDidAppear(animated)
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !tableView.showsVerticalScrollIndicator {
tableView.showsVerticalScrollIndicator = true
}
}
更新:请看下面Cezar 的回答,它提供了一个很好的解决方法,没有我的建议的任何缺点。
根据文档,这是一种行为UITableViewController
:
当表格视图出现时,控制器会闪烁表格视图的滚动指示器。该类
UITableViewController
在超类方法中实现了这一点viewDidAppear:
。
所以我认为你有两个选择:
UITableViewController
并开始使用裸UIViewController
. 重建UITableViewController
from的功能UIViewController
并不难(您可以参考这篇旧文章)。viewDidAppear:
而不调用[super viewDidAppear:animated]
. 这里的问题是你不知道UITableViewController
在viewDidAppear:
被调用时会做什么,所以你可能会破坏一些东西。