为啥 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 压缩

iPhone:向 Cell ContentView 添加子视图会在滚动时覆盖单元格文本

带有自动布局的滚动视图表单

UIScrollView 的 ContentView 中的 UIViewControllers?