ios - 模仿 iOS 10 上的 adjustmentContentInset?

标签 ios swift uiscrollview uikit ios10

我希望通过测量 contentOffset 来修改 scrollViewDidScroll(_:)tableView 单元格 subview 的大小和位置。第一次调用 scrollViewDidScroll(_:) 时,contentOffset 似乎跳转到非零值。

对于 UINavigationController 中的 UITableView,iOS 11 上的 adjustedContentInset 正确地允许我计算相对的 contentOffset滚动tableView

例如,如果我滚动 tableView,我可以计算出它滚动的精确量,如下所示:

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    var adjustedTopInset: CGFloat = 0.0
    if #available(iOS 11.0, *) {
        adjustedTopInset = scrollView.adjustedContentInset.top
    }
    let deltaY = scrollView.contentOffset.y - adjustedTopInset
}

问题是,由于 adjustedContentInset 仅在 iOS 11 上可用,因此如何在 iOS 10 上计算相同的相对滚动量?

viewDidLoad()中,tableViewcontentOffsetCGPointZero,但是第一次 >scrollViewDidScroll(_:) 被调用,contentOffset.y 跳转到一个值,即导航栏和状态栏的高度。在 iOS 11 上,adjustedContentInset 通过提供该高度来提供帮助。

如何在 iOS 10 上计算此值?

最佳答案

听起来这可能是一个“x-y”问题。您还没有解释您真正想要做什么,但提及 viewDidLoad 表明您正在尝试在 viewDidLoad 中获取一些测量值,以便稍后了解该测量值发生了多少变化。但是您无法在 viewDidLoad 中测量任何东西;太早了。将测量推迟到第一次调用 viewDidAppear 时,您将获得正确的起始值。

关于ios - 模仿 iOS 10 上的 adjustmentContentInset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588377/

相关文章:

ios - Objective C-单例导入错误

ios - 使用 UIDocumentPickerViewController 在 Swift 中导入文本

swift - swift Foundation 中的第 5747 行是“public typealias ObservableObject = ObservableObject”,为什么?

ios - 缩放后无法平移 UIScrollView

iphone - NSPredicate 用于一对多关系

ios - 如何在 TabBarController 中重置 UIViewController

ios - MagicalRecord - 检索最后插入的记录 ID

ios - 如何从货币代码中获取国家名称?

ios - 无法让 UIScrollView 在 UITableViewCell 内部被识别,nil 错误

ios - UIView的frame渲染大于frame