<分区>
我正在关注 Raywenderlich 关于 UIScrollView
的教程,它可以平移和缩放图像 (https://www.raywenderlich.com/159481/uiscrollview-tutorial-getting-started)。除了我以编程方式创建 View 和布局约束外,我的代码与他们的代码完全相同。我的不工作。
我发现问题是我的 ImageView
在 viewDidLayoutSubviews()
中有一个零 bounds
值。但是,无论我是在 Storyboard 中还是在代码中创建约束,应该没有任何区别,对吧?如果是这样,将不胜感激任何解决方法的建议。 viewDidLoad()
部分是我自己的代码。
class ComposeController: UIViewController {
let scrollView = UIScrollView()
let imageView = UIImageView()
var imageViewBottomConstraint: NSLayoutConstraint!
var imageViewLeadingConstraint: NSLayoutConstraint!
var imageViewTopConstraint: NSLayoutConstraint!
var imageViewTrailingConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
imageView.image = MyImage //from Assets
scrollView.delegate = self
view.addSubview(scrollView)
scrollView.addSubview(imageView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
imageView.translatesAutoresizingMaskIntoConstraints = false
imageViewTopConstraint = imageView.topAnchor.constraint(equalTo: scrollView.topAnchor)
imageViewBottomConstraint = imageView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor)
imageViewLeadingConstraint = imageView.leftAnchor.constraint(equalTo: scrollView.leftAnchor)
imageViewTrailingConstraint = imageView.rightAnchor.constraint(equalTo: scrollView.rightAnchor)
imageViewTopConstraint.isActive = true
imageViewBottomConstraint.isActive = true
imageViewLeadingConstraint.isActive = true
imageViewTrailingConstraint.isActive = true
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
updateMinZoomScaleForSize(view.bounds.size)
}
fileprivate func updateMinZoomScaleForSize(_ size: CGSize) {
let widthScale = size.width / imageView.bounds.width
let heightScale = size.height / imageView.bounds.height
let minScale = min(widthScale, heightScale)
scrollView.minimumZoomScale = minScale
scrollView.zoomScale = minScale
}
}
extension ComposeController: UIScrollViewDelegate {
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
}