ios - 为什么在使用分段控件时 UITableView contentOffset 会发生变化?

标签 ios swift uitableview uiscrollview uikit

我有一个 UITableView它的导航栏中有一个分段控件。我使用同一个 TableView 根据分段控件的选定索引显示 3 组不同的数据。我现在试图保留每个分割选项的滚动位置,这样看起来每个分割选项都有一个表格(即每个选择的结果都有独立的滚动位置)。

为此,我存储了一个 CGPoint每个状态的变量,设置contentOffset when the selected segment index changes.该变量用于在段更改时设置 TableView 的内容偏移量。

然而,这似乎是contentOffset当所选段索引更改而没有对表中的位置进行任何可见更改时,值就会发生变化。就像内容偏移量的 0 位置在移动,这使得我的存储值现在是错误的。

当我的 Controller 包含以下方法时:

override func viewDidLoad() {
    // set up the view here...        

    print(tableView.contentOffset)
}

@IBAction func selectedSegmentChanged(sender: AnyObject) {
    print(tableView.contentOffset)

    // code to change the data shown in the table view...
}

我在加载 View 时记录了以下内容:

(0.0, 0.0)

但在更改段后我得到:

(0.0, -64.0)

所有状态都显示表格 View 滚动到完全相同的位置,即 - 在顶部。

此行为使我无法正确存储滚动位置,因为内容偏移的“含义”似乎正在发生变化。


编辑:内容偏移实际上是在 viewDidLoad() 之间调整的和 viewDidAppear() ,很可能是由于内容插入。所以我现在第一次存储内容偏移值viewDidAppear()被称为。

最佳答案

这个问题通常是由 View Controller 上的属性引起的。将其设置为 false 应该可以修复它。

self.automaticallyAdjustsScrollViewInsets = false

也可以从 Storyboard 中设置。只需选择 View Controller 并取消选中 Adjusts scroll view insets

关于ios - 为什么在使用分段控件时 UITableView contentOffset 会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583593/

相关文章:

ios - Cordova InAppBrowser - 单击链接后如何返回 iOS 设备上的应用程序

iOS 自定义字体呈现元音变音字形的问题

arrays - 如何在使用表格 View 和搜索栏时添加复选标记

ios - 当键盘出现时,快速 UITableView 向上滚动,但我看不到顶部单元格

ios - 如何删除tableview的单元格?

ios - 整数不能做数学吗?

ios - 如何为自定义UIControl添加触摸事件并在swift 5中确定触摸的项目

iphone - iOS,按下 "back"按钮时停止运行功能

ios - 如何在 Touchid 后更改 View

swift - 使用 Swift 将用户输入从 TableViewController 复制到 ViewController