UIScrollView的。使用safeAreaInsets计算内容大小时,内容偏移量增加了一倍

时间:2018-06-06 21:00:20

标签: ios cocoa-touch uiscrollview statusbar contentoffset

scrollview .contentInsetAdjustmentBehavior = .always。在scrollview中,我有单个子视图 - contentViewscrollView.adjustedContentInset等于(20, 0, 0 ,0)(由系统为状态栏设置) 现在,当我尝试将contentView设置为与scrollView的安全区域相同的高度(在我的情况下,只有scrollView.fram.size,高度降低20)我遇到了问题 - scrollView.contentOffsset变为(-40, 0)而不是(-20, 0)(使用导航控件(-128, 0)而不是(-64, 0)时相同)
仅当contentSize.height等于或低于scrollView.height且使用adjustedContentInset.topsafeAreaInsets.top进行高度计算时,此行为才会重现。
我尝试过(有帮助):
  - 用等价常数替换adjustedContentInset.top引用 - 所有工作都是完美的,但我不能硬编码这个值
我尝试过(并没有取得好成绩):
  - 圆adjustedContentInset.top值   - 从adjustedContentInset.top创建新的Int / Double / CGGloat值   - 从adjustedContentInset.top创建新的String值并将其转换回CGFloat(甚至是这样的垃圾)
  - 检查adjustedContentInset.top是否等于20(并且是)   - 具有值和adjustedContentInset.top

的不同操作组合

我简化了我的代码以向您展示这一点(这就是为什么它看起来毫无用处):

不起作用

func placeContentView() {
    var newContentSize = bounds.size

    newContentSize.height -= safeAreaInsets.top

    contentSize         = newContentSize
    contentView.frame   = CGRect(origin: .zero, size: newContentSize)
}

也是这个

func placeContentView() {
    var newContentSize = bounds.size

    newContentSize.height -= adjustedContentInset.top

    contentSize         = newContentSize
    contentView.frame   = CGRect(origin: .zero, size: newContentSize)
}

结果是 doubled offset

但是这个,工作正常

func placeContentView() {
    var newContentSize = bounds.size

    newContentSize.height -= 20

    contentSize         = newContentSize
    contentView.frame   = CGRect(origin: .zero, size: newContentSize)
}

结果是 enter image description here

请帮帮我。我很快就会生气。

0 个答案:

没有答案