我scrollview
.contentInsetAdjustmentBehavior = .always
。在scrollview中,我有单个子视图 - contentView
。
scrollView.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.top
或safeAreaInsets.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)
}
但是这个,工作正常
func placeContentView() {
var newContentSize = bounds.size
newContentSize.height -= 20
contentSize = newContentSize
contentView.frame = CGRect(origin: .zero, size: newContentSize)
}
请帮帮我。我很快就会生气。