[英]UIImageView in ScrollView aspect ratio not working
我在情节提要中定义了一个UIScrollView,并带有一个插座。 此滚动视图通过代码(不在情节提要上)将UIImageView添加到了它。 当我运行该应用程序时,图像会被拉伸。 一旦我触摸以缩放图像,它就会捕捉到适当的纵横比。
这里发生了什么?!
@IBOutlet var scrollView: UIScrollView!
var imageView = UIImageView()
var selectedImage: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
imageView.image = selectedImage
imageView.contentMode = .ScaleAspectFit
imageView.userInteractionEnabled = true
scrollView.contentMode = .ScaleAspectFit
scrollView.addSubview(imageView)
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleHeight, scaleWidth)
scrollView.minimumZoomScale = 0.3
scrollView.maximumZoomScale = 1
scrollView.zoomScale = minScale
centerScrollViewContents()
self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0
}
修正的问题:如以下答案所示,我编辑了代码以在viewWillLayoutSubviews中定义imageView.frame而不是viewDidLoad。 我现在遇到一个新问题-图像无法放大...它允许您放大图像,直到松开手指,然后恢复为原始大小。
这与scrollView.maximumZoomScale不够大有关吗?
更正的代码:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
}
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
//imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height)
imageView.image = selectedImage
imageView.contentMode = .ScaleAspectFit
imageView.userInteractionEnabled = true
scrollView.contentMode = .ScaleAspectFit
scrollView.addSubview(imageView)
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleHeight, scaleWidth)
scrollView.minimumZoomScale = 0.3
scrollView.maximumZoomScale = 2.0
scrollView.zoomScale = minScale
centerScrollViewContents()
self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0
}
在-viewDidLoad()方法中设置框架为时过早
如果您将在-viewDidLoad()中打印您的scrollView.frame,则实际上将返回该框架,然后视图将对其子视图进行布局。
因此,您需要在viewWillLayout中对imageView进行约束或重新定义imageView.frame。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.