gpt4 book ai didi

ios - swift-无法使用 AutoLayout 在 UIScrollView 中将 UIImageView 居中

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:07 26 4
gpt4 key购买 nike

我搜索了很多关于 UIScrollView 的文章,其中包含 UIImageView,但都没有 AutoLayout 信息。我所做的是:在 UIViewController 中放置一个 UIScrollView,约束条件为前 10 个,前 10 个,后 50 个,尾随 10 个;在 UIScrollView 中放置一个 UIImageView,约束条件为顶部 0、前导 0、底部 0、尾随 0。我想要的很简单:让我的 UIImageView 在应用首次加载时适合我的 UIScrollView,并让我的 UIImageView 水平和垂直居中。现在我可以看到图像并且正好适合屏幕,但是图像就在 UIScrollView 的顶部。(注意:在这种情况下,我的图像在缩放到最小 后的宽度zoomScale 等于 UIScrollView 的宽度,我的图片缩放到最小 zoomScale 后的高度小于 UIScrollView 的宽度.)我真的无法将我的 UIImageView 垂直移动到 UIScrollView 的中心,也找不到我出错的地方。非常感谢。

import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func centerScrollViewContents() {
let boundsSize = scrollView.bounds.size
var contentsFrame = imageView.frame
if contentsFrame.size.width < boundsSize.width {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
} else {
contentsFrame.origin.x = 0.0
}

if contentsFrame.size.height < boundsSize.height {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
} else {
contentsFrame.origin.y = 0.0
}
}

override func viewDidLayoutSubviews() {
let myImage = UIImage(named: "7.jpg")
imageView.image = myImage
let weightScale = scrollView.bounds.size.width / myImage!.size.width
let heightScale = scrollView.bounds.size.height / myImage!.size.height
let minScale = min(weightScale, heightScale)
let imagew = myImage!.size.width * minScale
let imageH = myImage!.size.height * minScale
let imageRect = CGRectMake(0, 0, imagew, imageH)
imageView.frame = imageRect
scrollView.contentSize = myImage!.size
scrollView.maximumZoomScale = 1.0
scrollView.minimumZoomScale = minScale
scrollView.zoomScale = minScale
imageView.frame = imageRect
centerScrollViewContents()
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return imageView
}

}

最佳答案

小 pig 支持 pic-o-matic 的回答。我有一个案例,只有当它小于 ScrollView 框架时我才需要将图像居中。使用为直接解决方案制作的插图。

if imageView.frame.height <= scrollView.frame.height {
let shiftHeight = scrollView.frame.height/2.0 - scrollView.contentSize.height/2.0
scrollView.contentInset.top = shiftHeight
}
if imageView.frame.width <= scrollView.frame.width {
let shiftWidth = scrollView.frame.width/2.0 - scrollView.contentSize.width/2.0
scrollView.contentInset.left = shiftWidth
}

关于ios - swift-无法使用 AutoLayout 在 UIScrollView 中将 UIImageView 居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com