模仿 iOS 10 上的 adjustedContentInset?
Mimic adjustedContentInset on iOS 10?
我正在寻找通过测量 contentOffset
从 scrollViewDidScroll(_:)
修改 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()
中tableView
的contentOffset
是CGPointZero
,但是第一次调用scrollViewDidScroll(_:)
时,contentOffset.y
跳转到一个值,该值是导航栏和状态栏的高度。 On iOS 11 adjustedContentInset
通过提供该高度来提供帮助。
如何在 iOS 10 上进行计算?
听起来这可能是一个 "x-y" 问题。您还没有解释您真正想要做什么,但是提到 viewDidLoad
表明您正试图在 viewDidLoad
中获得一些测量值,以便稍后知道测量值发生了多少变化.但是你不能在viewDidLoad
中测量任何东西;太早了。将测量推迟到第一次调用 viewDidAppear
之后,您将获得正确的起始值。
我正在寻找通过测量 contentOffset
从 scrollViewDidScroll(_:)
修改 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()
中tableView
的contentOffset
是CGPointZero
,但是第一次调用scrollViewDidScroll(_:)
时,contentOffset.y
跳转到一个值,该值是导航栏和状态栏的高度。 On iOS 11 adjustedContentInset
通过提供该高度来提供帮助。
如何在 iOS 10 上进行计算?
听起来这可能是一个 "x-y" 问题。您还没有解释您真正想要做什么,但是提到 viewDidLoad
表明您正试图在 viewDidLoad
中获得一些测量值,以便稍后知道测量值发生了多少变化.但是你不能在viewDidLoad
中测量任何东西;太早了。将测量推迟到第一次调用 viewDidAppear
之后,您将获得正确的起始值。