Swift 5 UIScrollView 添加背景图片

Swift 5 UIScrollView adding background image

我正在尝试添加将随垂直滚动视图一起滚动的背景图像。在添加背景图片之前,我的scrollView只能垂直滚动,但是设置背景图片后,scrollView现在可以水平和垂直滚动,就好像背景图片的宽度大于scrollview的宽度

let scrollView: UIScrollView = {
    let view = UIScrollView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.isDirectionalLockEnabled = true
    view.isScrollEnabled = true
    return view
}()

let backgroundIV: UIImageView = {
    let imageView = UIImageView(image: UIImage(named: "background"))
    imageView.contentMode = UIView.ContentMode.scaleToFill
    return imageView
}()

我用来设置视图的函数

private func setupContent() {

    scrollViewHeight = viewHeight * 2

    [scrollView].forEach { view.addSubview([=12=]) }
    scrollView.anchor(top: view.topAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
    scrollView.contentSize = CGSize(width: 0, height: scrollViewHeight)

    [backgroundIV].forEach { scrollView.addSubview([=12=]) }
    backgroundIV.anchor(top: scrollView.topAnchor, leading: scrollView.leadingAnchor, bottom: scrollView.bottomAnchor, trailing: scrollView.trailingAnchor, size: .init(width: 0, height: scrollViewHeight))

}

那么我应该如何设置我的背景图片以使我的滚动视图不会水平滚动??

您必须为 scrollView 设置正确的内容大小或调整内容。

将您的 imageView 宽度设置为等于您的 scrollView 的宽度。它将避免 scrollView 水平滚动。 请找到以下用于设置 widthAchor 的代码。

imageView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true

应用 Vikram Parimi 的答案并进一步挖掘后,有两个因素影响我的滚动视图变为水平

  • Scroll View和view的约束特性告诉我们:对齐和大小已经不矛盾了,必须定义这两者才能消除歧义。这是我从 https://medium.com/@tingyishih/ios-scrollview-constraints-8d8140d329a0

  • 中发现的
  • 另一个因素是这个bug只存在于iphone 11 pro max模拟器,而不存在于iphone 8模拟器,可以使用safeAreaLayoutGuide解决

 if #available(iOS 11.0, *) {
      imageView.widthAnchor.constraintEqualToAnchor(scrollView.safeAreaLayoutGuide.widthAnchor).active = true
 } else {
      imageView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true
 }