【发布时间】:2018-10-11 12:47:00
【问题描述】:
我以编程方式将图像放入 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")
}
}
【问题讨论】:
-
您没有为
CustomView相对于 ScrollView 设置任何约束 -
你的滚动视图框架是什么?
-
所以我应该删除'let view = CustomView(frame: CGRect(x: self.scrollView.frame.width * CGFloat(i), y: 0, width: self.scrollView.frame.宽度,高度:self.scrollView.frame.height)) view.imageView.image = data.image?' ?
-
我没有放置滚动视图框架,因为我认为 imageView 约束会相应地增加图像的大小。不是吗?
标签: ios swift uiscrollview autolayout