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似乎也没什么区别。