Ios 在UIScrollview上缩放图像后,它会在图像区域外滚动

Ios 在UIScrollview上缩放图像后,它会在图像区域外滚动,ios,iphone,swift,uiscrollview,Ios,Iphone,Swift,Uiscrollview,我正在尝试使用UIScrollview实现图像缩放功能。我将图像保持在合适的位置。 图像位于UIScrollView中,并且给出的图像帧与UIScrollView类似 这是我的密码 class CroppingImageViewController: UIViewController, UIScrollViewDelegate{ var image:UIImage = UIImage() @IBOutlet var imageview:UIImageView!

我正在尝试使用
UIScrollview
实现图像缩放功能。我将图像保持在合适的位置。
图像位于
UIScrollView
中,并且给出的图像帧与
UIScrollView
类似
这是我的密码

class CroppingImageViewController: UIViewController, UIScrollViewDelegate{    
    var image:UIImage = UIImage()

    @IBOutlet var imageview:UIImageView!
    @IBOutlet var scrollview:UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        imageview.image = image
        scrollview.contentSize = imageview.frame.size;
        scrollview.minimumZoomScale = 1.0;
        scrollview.maximumZoomScale = 4.0;
        scrollview.setZoomScale(scrollview.minimumZoomScale, animated: true)
        scrollview.delegate = self;
    }

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageview
    }
}  


我的要求是,图像应该滚动到它的内容

self.automaticallyAdjustsScrollViewInsets=NO;
根据apple文档,AutomaticJustScrollViewInsets默认为YES

所以它试图控制你的滚动视图


将此添加到viewdidload方法中,然后重试。

我搜索相同的内容已经有一段时间了。我确实喜欢这个。这对我来说很有效

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let image = info[UIImagePickerControllerOriginalImage] as! UIImage
        imageView.image = image

        imageView.contentMode = UIViewContentMode.center
        imageView.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)

        ScrollView.contentSize = imageView.frame.size

        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 = minScale
        ScrollView.maximumZoomScale = 1
        ScrollView.zoomScale = minScale
        ScrollView.clipsToBounds = true

        centerScrollViewContents()

        picker.dismiss(animated: true, completion: nil)

    }

 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

        }else{
            contentsFrame.origin.x = 0
        }

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

        imageView.frame = contentsFrame
    }
func-imagePickerController(picker:UIImagePickerController,didFinishPickingMediaWithInfo:[字符串:任意]){
将image=info[UIImagePickerControllerOriginalImage]设为!UIImage
imageView.image=image
imageView.contentMode=UIViewContentMode.center
imageView.frame=CGRect(x:0,y:0,宽度:image.size.width,高度:image.size.height)
ScrollView.contentSize=imageView.frame.size
让scrollViewFrame=ScrollView.frame
设scaleWidth=scrollViewFrame.size.width/ScrollView.contentSize.width
让scaleHeight=scrollViewFrame.size.height/ScrollView.contentSize.height
设最小刻度=最小(刻度高度,刻度宽度)
ScrollView.minimumZoomScale=minScale
ScrollView.maximumZoomScale=1
ScrollView.zoomScale=最小刻度
ScrollView.clipsToBounds=true
centerScrollViewContents()
picker.disclose(动画:true,完成:nil)
}
func centerScrollViewContents(){
让boundsSize=ScrollView.bounds.size
var contentsFrame=imageView.frame
如果contentsFrame.size.width
还是一样。不走运!!