iosswift3uiscrollviewuiimageviewcontentmode

Can't fully scroll within UIScrollView


I have a UIImageView within a UIScrollView, and I want to be able to scroll around the dimensions of the "regular" photo dimensions. My issue is that I am able to scroll, however when it gets to the top or towards the bottom of the photo, the scroll position does not stay, instead it "bounces" and moves back up a little bit, and does not allow for the photo to stay in that position, how would I go about fixing this?

here is the code below:

 scrollView.frame = CGRect(x: self.view.frame.width * 0, y: self.view.frame.height / 3, width: self.view.frame.width, height: self.view.frame.width)
        self.view.addSubview(scrollView)
        scrollView.delegate = self


        let image = imageView.image
        imageView.frame = CGRect(x: self.view.frame.width * 0, y: self.view.frame.height * 0, width: (image?.size.width)!, height: (image?.size.height)!)
        imageView.frame = scrollView.bounds
        imageView.contentMode = .scaleAspectFill
        scrollView.addSubview(imageView)

An example would be if you had a full screen photo taken with the camera, and then when the photo is displayed within the view, the whole photo is not able to stay in its position when it is being scrolled.


Solution

  • You are doing a number of things wrong, and as mentioned you should move to auto-layout and constraints, however...

    To get your image scrolling the way you are going:

        // set scroll view frame to be full width of view, start 1/3 of the way down from the top, and make the height the same as the width
        scrollView.frame = CGRect(x: 0, y: self.view.frame.height / 3, width: self.view.frame.width, height: self.view.frame.width)
    
        // add the scroll view to the view
        self.view.addSubview(scrollView)
    
        // use "if let" so you're not force-unwrapping optionals
        if let image = imageView.image {
    
            // set the imageView's frame to the size of the image
            imageView.frame = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)
    
            // add the imageView to the scroll view
            scrollView.addSubview(imageView)
    
            // set the contentSize of the scroll view - the "scrollable area" - to the size of the image view
            scrollView.contentSize = imageView.bounds.size
        }