Swift 5 UIScrollView添加背景图像



我正在尝试添加一个背景图像,该图像将与垂直滚动视图一起滚动。在添加背景图像之前,我的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($0) }
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($0) }
backgroundIV.anchor(top: scrollView.topAnchor, leading: scrollView.leadingAnchor, bottom: scrollView.bottomAnchor, trailing: scrollView.trailingAnchor, size: .init(width: 0, height: scrollViewHeight))
}

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

您必须为滚动视图设置正确的内容大小或调整内容。

将imageView的宽度设置为等于scrollView的宽度。它将避免滚动查看水平滚动。请找到下面的代码来设置宽度Achor。

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

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

  • 滚动视图和视图之间约束的特性告诉我们:对齐和大小不再矛盾,必须定义这两个特性以消除模糊性。我从中发现https://medium.com/@tingyishih/ios-scrollview-contraints-8d8140d329a0

  • 另一个因素是,该漏洞只存在于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
}

最新更新