模仿 iOS 10 上的 adjustedContentInset?

Mimic adjustedContentInset on iOS 10?

我正在寻找通过测量 contentOffsetscrollViewDidScroll(_:) 修改 tableView 的单元格子视图的大小和位置。 contentOffset 似乎在第一次调用 scrollViewDidScroll(_:) 时跳转到非零值。

对于 UINavigationController 内的 UITableView,iOS 11 上的 adjustedContentInset 允许我在滚动 [=12= 时正确计算相对 contentOffset ].

例如,如果我滚动 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跳转到一个值,该值是导航栏和状态栏的高度。 On iOS 11 adjustedContentInset 通过提供该高度来提供帮助。

如何在 iOS 10 上进行计算?

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