Swift scrollToRow不';不能准确地滚动
在我正在使用的应用程序中,我有一个带有四个屏幕的选项卡栏控制器。Swift scrollToRow不';不能准确地滚动,swift,uitableview,Swift,Uitableview,在我正在使用的应用程序中,我有一个带有四个屏幕的选项卡栏控制器。 每个选项卡区域内都有一个单独的导航控制器堆栈,用于与应用程序的该部分相关的屏幕。 其中之一是设置部分,我希望用户能够在必要时更改其位置。就像iPhone上的设置部分一样 因此,我在一个UITableView中列出了国家列表,根据它们的首字母按部分进行分组。选择一个默认国家,就像iPhone设置一样,我希望UITableView在第一次显示时将该国家显示为顶行 我目前将scrollToRow放置在viewDidLoad中,如下所示:
每个选项卡区域内都有一个单独的导航控制器堆栈,用于与应用程序的该部分相关的屏幕。
其中之一是设置部分,我希望用户能够在必要时更改其位置。就像iPhone上的设置部分一样 因此,我在一个
UITableView
中列出了国家列表,根据它们的首字母按部分进行分组。选择一个默认国家,就像iPhone设置一样,我希望UITableView
在第一次显示时将该国家显示为顶行
我目前将scrollToRow
放置在viewDidLoad
中,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
// Code to sort countries into sections and to find the correct initial country, index of which is store in selectedIndex
self.tableView.layoutIfNeeded()
self.tableView.scrollToRow(at: selectedIndex ?? IndexPath(row: 0, section: 0), at: .top, animated: false)
}
现在,如果最初的国家接近榜首,一切都会顺利进行。但是如果它接近底部,比如英国,它不会滚动到顶部,只是接近顶部——尽管它可以滚动得更远。这几乎就像它忘记了选项卡栏的存在,并且不会再向上滚动。当然,手动滚动到更高的位置没有问题。(我不知道如何在这篇文章中包含一幅图像,因此我给出了描述。)
几个月前,我在scrollToRow上遇到了另一个问题,通过在调用scrollToRow
之前插入tableView.LayoutFneed()
解决了这个问题,因此它包含在这里。但它在这里不起作用
我曾尝试在viewdide
中调用scrollToRow
,正如我读过的一篇文章中所建议的那样,但是在“跳转”到正确的行之前,该表显示的国家不可见。我希望屏幕打开时它就在那里
有人有什么想法吗?谢谢
(我在iOS 11.0环境中使用的是Xcode 11.3。)您必须在scrollToRow之前添加一个检查
override func viewDidLoad() {
super.viewDidLoad()
// Code to sort countries into sections and to find the correct initial country, index of which is store in selectedIndex
self.tableView.layoutIfNeeded()
if tableView.numberOfSections >= selectedIndex.section
,tableView.numberOfRows(inSection: selectedIndex.section) >= selectedIndex.row {
self.tableView.scrollToRow(at: selectedIndex, at: .top, animated: false)
}
}
您是否尝试过将
.top
切换到.bottom
?@Wyetro-刚刚尝试过,所选行根本不可见。因此,scrollToRow
根本没有考虑选项卡栏。在手动滚动时处理,但在以编程方式强制滚动时不处理。我怎样才能避开这个问题呢?阻止TabBar似乎也没什么区别。