2012-01-17 63 views
7

所以我有一个UIImageView作为子视图UIScrollView,我已将contentSize设置为小于UIImageView宽度和高度,但它不允许我滚动。为什么是这样?以下是一些代码:UIScrollView不滚动,虽然contentSize小于UIImageView

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 

任何想法?

+0

试试这个... imgScrollView.contentSize = imgView.frame 。尺寸; – 2012-01-17 04:41:04

+0

也不起作用 – adit 2012-01-17 05:02:10

回答

10

这是因为您的滚动视图边界的大小大于您的内容大小。 内容大小需要是图像视图的实际大小,可见大小由帧/边界设置。我想你想滚动一个{200,200}大小的矩形图像? 试试这个:

 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 
+0

所以帧大小必须小于contentSize?如果框架大小与contentSize相同,那么它将不滚动? – adit 2012-01-17 05:49:03

+14

默认情况下,是。但是,如果您将alwaysBounceVertical和alwaysBounceHorizo​​ntal设置为YES(默认为NO),则即使contentSize小于帧大小,您也可以拖动内容视图 – 2012-01-17 06:39:11

+0

当我将contentSize设置为小于边界大小时,scrollview未滚动。在我的情况下,我想在键盘出现时减小scrollview的内容大小,我惊讶地发现缩小内容大小并不能使滚动视图滚动。猜猜,我必须改变滚动视图的框架。 – 2014-07-27 06:55:07

0

滚动视图内容大小应小于滚动视图帧的宽度和高度
更做到这一点 -

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

我认为这将有助于。

+0

如果它是一样的呢? – adit 2012-01-17 05:54:30

+0

如果你想滚动滚动,它将不允许滚动,内容大小应该大于帧大小 – mithilesh 2012-01-17 07:14:16

5

我知道这是老了,但我想指出的是,当你创建一个UIScrollView在代码中设置的最重要的事情是:

scrollView.scrollEnabled = YES;

如果不设置,您contentSize是无关紧要的。

+1

这更适合作为评论,而不是回答。无论如何,这是误导:正如[文档中所述](http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/ instp/UIScrollView/scrollEnabled),'scrollEnabled'的默认值是'YES'。您**不需要在代码中将'scrollEnabled'设置为'YES',除非您之前将其设置为'NO'。 – sjwarner 2013-03-21 11:18:33

+1

我不同意。它也可以作为答案。 (它只是解决了我的问题,谢谢克里斯。)很多人向下滚动查看答案,并且除非答案引导他们阅读,否则不要阅读所有(或任何)评论。有时候你正在使用另一个编写的代码,你可能并不熟悉这一切。 – Alyoshak 2013-05-15 20:54:39

+0

我必须将我的设置设置为YES才能使其滚动。 – Chris 2013-05-29 16:30:19

0

如果您尝试使用IB设置此值,请确保您的UIScrollView的高度属性设置为低于contentView的高度属性的值。例如,如果您已将contentView的高度设置为810点,请确保将UIScrollView的高度设置为610点左右。

2

这样做的捷径是始终将contentSize设置为大于视图大小。但是,有一个在斯威夫特一个属性,它允许内容大小的滚动视图总是“滚动”不管:

scrollView.alwaysBounceVertical = true 

有一个水平滚动条以及