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
}
我正在尝试添加将随垂直滚动视图一起滚动的背景图像。在添加背景图片之前,我的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
}