模仿iOS 10上的adjustContentInset?

时间:2018-05-29 15:51:02

标签: ios swift uiscrollview uikit ios10

我正在通过衡量tableViewscrollViewDidScroll(_:)修改contentOffset小区的子视图的大小和位置。第一次调用contentOffset时,scrollViewDidScroll(_:)似乎会跳转到非零值。

对于UITableView中的UINavigationController,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()contentOffset的{​​{1}}为tableView,但第一次调用CGPointZero时,scrollViewDidScroll(_:)会跳转到contentOffset.y一个值,它是导航栏和状态栏的高度。在iOS 11上adjustedContentInset通过提供高度来帮助。

如何在iOS 10上计算出来?

1 个答案:

答案 0 :(得分:2)

听起来好像这可能是" x-y"问题。你还没有解释你真正想做的事情,但提到viewDidLoad表明你试图在viewDidLoad中获得一些测量值,以便稍后了解多少测量结果发生了变化。但你无法在viewDidLoad中衡量任何;这太早了。将测量推迟到第一次调用viewDidAppear之后,您将获得正确的起始值。