为啥 contentView 在滚动视图中有 y 偏移
Posted
技术标签:
【中文标题】为啥 contentView 在滚动视图中有 y 偏移【英文标题】:Why contentView has a y-offset inside a scrollView为什么 contentView 在滚动视图中有 y 偏移 【发布时间】:2016-04-08 19:34:20 【问题描述】:我尝试向scrollView添加一个子视图(UIView)以将内容定位在scrollView中,但我对为什么可滚动内容以某个偏移量开始感到困惑。
我的视图层次结构和约束如下所示
当我运行应用程序时(滚动视图的背景为粉红色,内容视图的背景颜色为黑色)
在我的故事板中,它看起来像这样
如果这可能有帮助,在我的 viewDidAppear 方法中:
override func viewDidAppear(animated: Bool)
print(view.frame)
print(baseView.frame)
print(scrollView.frame)
print(scrollView.bounds)
print(scrollView.contentSize)
print(contentView.frame)
我明白了
(0.0, 0.0, 375.0, 618.0)
(0.0, 64.0, 375.0, 554.0)
(0.0, 0.0, 375.0, 554.0)
(0.0, -64.0, 375.0, 554.0) //Why there is a negative y-offset here?
(375.0, 1200.0)
(0.0, 0.0, 375.0, 1200.0)
【问题讨论】:
【参考方案1】:请注意,滚动视图位于状态栏和导航栏下方(从y = 0
开始)。
导航栏的高度=44 points
状态栏高度=20 points
总共64 points
。
通常滚动视图从y = 0
开始,因此UIViewController
会自动更改其内容插入,以便内容不会隐藏在顶部栏下。
见UIViewController.automaticallyAdjustsScrollViewInsets
您应该在控制器上将其设置为 false
。
【讨论】:
对于 Swift 4,它现在是UIScrollView
上的 contentInsetAdjustmentBehavior
属性
@TigranIskandaryan 与 Swift 无关。我认为它来自 ios 9 或 iOS 10。
@Sulthan iOS 11【参考方案2】:
在 viewDidLoad 中:
scrollView.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never
【讨论】:
以上是关于为啥 contentView 在滚动视图中有 y 偏移的主要内容,如果未能解决你的问题,请参考以下文章
如何在滚动 contentView 之前向上移动 scrollview 的框架? (当 scrollView 从屏幕中间开始时)
ContentView (SwiftUI) 的背景图像不是子视图,但具有正确的滚动行为
UIScrollView 和 Autolayout 防止 contentview 压缩