UIScrollView not scrolling although contentSize is

2019-02-09 14:21发布

So I have a UIImageView as a subview of UIScrollView, I've set the contentSize to be smaller than the UIImageView width and height, however it doesn't allow me to scroll.. why is this? Here's some code:

UIImage * image = [UIImage imageWithData:data];
                UIImageView * imgView = [[UIImageView alloc] initWithImage:image];
                [imgView setUserInteractionEnabled:YES];
                //[imgView setContentMode:UIViewContentModeScaleAspectFill];
                [imgView setBackgroundColor:[UIColor clearColor]];
                [imgView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
                [imgView setFrame:CGRectMake(0, 0, imgView.frame.size.width, imgView.frame.size.height)];

                CGRect imgFrame;
                imgFrame.size.width = originalImageSize.width;
                imgFrame.size.height = originalImageSize.height;
                imgFrame.origin.x = imageOriginPoint.x;
                imgFrame.origin.y = imageOriginPoint.y;

                UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:imgFrame];
                [imgScrollView setScrollEnabled:YES];
                [imgScrollView setClipsToBounds:YES];
                [imgScrollView addSubview:imgView];
                [imgScrollView setBackgroundColor:[UIColor clearColor]];


  [imgScrollView setFrame:imgFrame];
                [imgScrollView setContentSize:CGSizeMake(200, 200)];

SCROLL VIEW CONTENT SIZE WIDTH IS 200.000000 AND HEIGHT CONTENT SIZE IS 200.000000
UIIMAGE VIEW WIDTH IS 2240.225830 AND HEIGHT IS 2240.225830
SCROLL VIEW FRAME WIDTH IS 768.000000 AND SCROLL VIEW FRAME HEIGHT IS 768.000061

Any idea?

5条回答
唯我独甜
2楼-- · 2019-02-09 14:44

If you are trying to set this using IB then make sure your UIScrollView's Height property is set to lower number than your contentView's Height property. For example, if you've set the height of your contentView to 810 pts make sure to set your UIScrollView's height to something like 610 pts or so.

查看更多
Fickle 薄情
3楼-- · 2019-02-09 14:48

scroll view content size should be more than scrollView frame width and height
do this -

    scrollView.contentSize = CGSizeMake(originalImageSize.width,originalImageSize.height);

I think it will help.

查看更多
Melony?
4楼-- · 2019-02-09 14:55

the janky way to do this is to always set the contentSize to be larger than the view size. But there's a property in Swift that allows a scrollview to always "scroll" regardless of the content size:

scrollView.alwaysBounceVertical = true

There's one for horizontal scrolling as well

查看更多
手持菜刀,她持情操
5楼-- · 2019-02-09 15:00

I know this is old, but I want to point out that when you create a UIScrollView in code the most important thing to set is:

scrollView.scrollEnabled = YES;

If you don't set that, your contentSize is irrelevant.

查看更多
霸刀☆藐视天下
6楼-- · 2019-02-09 15:03

That's because that your size of bounds of scroll view is larger than your content size. The content size need to be the actual size of image view, and the visible size is set by frame / bounds. I guess you want to scroll a image in a {200, 200} sized rect? Try this:

        UIScrollView * imgScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)]; // this is your visible rect
        [imgScrollView setScrollEnabled:YES];
        [imgScrollView setClipsToBounds:YES];
        [imgScrollView addSubview:imgView];
        [imgScrollView setBackgroundColor:[UIColor yellowColor]];

        [imgScrollView setContentSize:imgFrame.size]; // this is your image view size
查看更多
登录 后发表回答