我以编程方式将图像放入UIScrollview
中。当我在iPhone 8上运行模拟器时,每个图像的宽度完全适合屏幕。但是,当我在iPhone 8 Plus上运行它时,图像的宽度小于屏幕的宽度。我认为自动版式有问题。这背后的可能原因是什么?
我将以下代码放入ViewDidLoad
中。
scrollViewData = [scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 1")), scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 2")), scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 3")), scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 4")), scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 5")), scrollViewDataStruct.init(title: nil, image: #imageLiteral(resourceName: "promotion test 6"))]
scrollView.contentSize.width = self.scrollView.frame.width * CGFloat(scrollViewData.count)
var i = 0
for data in scrollViewData {
let view = CustomView(frame: CGRect(x: self.scrollView.frame.width * CGFloat(i), y: 0, width: self.scrollView.frame.width, height: self.scrollView.frame.height))
view.imageView.image = data.image
self.scrollView.addSubview(view)
i += 1
我将以下代码分开
class CustomView: UIView {
let imageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = UIColor.clear
imageView.contentMode = .scaleToFill
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(imageView)
imageView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
imageView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
imageView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
}
required init?(coder aDecoder: NSCoder){
fatalError("init(coder:) has not been implemented")
}
}
答案 0 :(得分:0)
iPhone 8
的屏幕尺寸为1334x750,比率为667:375。
iPhone 8 Plus
的屏幕尺寸为1920×1080,比率为16:9。
是的,图像将无法完美显示。因此,放大UIScrollView
应该可以像这样工作:
view.zoom(to: CGRect(x: 0, y:0, width: UIScreen.main.nativeBounds.width, height: UIScreen.main.nativeBounds.height, animated: false)
答案 1 :(得分:0)
在没有看到您的代码的情况下很难说出问题是什么,但我只是注意到您说过:
我将代码放在
ViewDidLoad
中。
一个问题可能是,在生命周期中调用viewDidLoad
时,您不能依赖于看到的视图尺寸。
如果您希望看到此“实际情况”,可以尝试添加:
print(view.frame)
到
viewDidLoad()
viewWillAppear(_:)
viewDidAppear(_:)
viewDidLayoutSubviews()
并看到值随着生命周期的进展而变化。
是的,不是真正的答案,而只是设置视图层次结构时应注意的事项。
因此,您已经在问题中添加了一些代码,谢谢:)
我偶然发现了这一行:
let view = CustomView(frame:CGRect(x:self.scrollView.frame.width * CGFloat(i),y:0,width:self.scrollView.frame.width,height:self.scrollView.frame.height ))
如上所述,您不确定scrollView
中viewDidLoad
的大小是否正确。尝试在print(scrollView.frame)
和viewDidLoad
中添加viewDidAppear
调用,看看大小是否保持不变。
因此,请尝试将添加内容的代码移至scrollView
的{{1}}上。
希望有帮助。