我添加了一个UIScrollView和3个UIViews。
我已经三次检查了UIScrollView的框架,UIViews的框架,它的contentOffset,超级视图的框架,通常所有相关的东西。
由于某些原因,当我将contentOffset设置为(0,0)时,会出现这样的情况:
我的项目中没有从偏移起始点开始的视图。
scrollView假设(0,0)是(0,50)附近的某个东西,这是导航条的高度,即使我没有使用它。
编辑
如果我在设备处于景观模式时打开应用程序,那么contentOffset的行为就很奇怪了。因此,它必须是一些自动调整,因为下巴的设备。
编辑2
我在没有下巴的设备上打开应用程序(iPhone 8),然后contentOffset自动调整到状态栏的高度。意思是(0,0)不是(0,0)而是(0,heightOfStatusBar)。
编辑3
在iPad上,它的行为是正常的,即使iPads有状态栏!
如何在每种情况下将其修正为(0,0) ?
发布于 2021-07-31 03:59:27
UIScrollView
有一个属性,它在其中“嵌入”内容,这样安全区域就不会重叠。
可以通过设置contentInsetAdjustmentBehavior
实例的UIScrollView
属性来更改它,如下所示:
scrollView.contentInsetAdjustmentBehavior = .never
注意,调整的不是contentOffset
,而是contentInset
。这就是为什么在所有情况下内容偏移量仍然是(0, 0)
的原因。
另外,如果您构建的iOS开发目标低于iOS 11.0,则可能会出现生成错误。在这种情况下,您可以使用以下代码代替。
if #available(iOS 11.0, *){
scrollView.contentInsetAdjustmentBehavior = .never
}
参考文献
发布于 2021-07-31 04:45:34
不,contentOffset不影响安全区,反之亦然。contentOffset用于scrollView内部的编程滚动。
如果要将UIScrollView链接到框架的边界,则必须使用Autolayout并激活一些约束。一步步地:
scrollView.translatesAutoresizingMaskIntoConstraints = false
let constraints: [NSLayoutConstraint] = [
scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
scrollView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
scrollView.widthAnchor.constraint(equalTo: view.widthAnchor),
scrollView.heightAnchor.constraint(equalTo: view.heightAnchor)
]
NSLayoutConstraint.activate(constraints)
因此,您的滚动视图将链接到电话边界的边缘。contentOffset = (0,0)。相反,如果您想将scrollView链接到安全区域,您必须使用view.layoutMarginsGuide,在那里您可以找到各种锚点。
每个UIView对象都与父视图协调系统一起工作。您的scrollView不知道任何有关状态栏、导航栏和工具栏的信息。例如,任何UIView的帧起源都是(0,0)。
因此,总括而言:
https://stackoverflow.com/questions/68601175
复制相似问题