【问题标题】:UIScrollView not scrolling although contentSize is smaller than UIImageView尽管 contentSize 小于 UIImageView,但 UIScrollView 不滚动
【发布时间】:2012-02-11 23:10:57
【问题描述】:

所以我有一个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

有什么想法吗?

【问题讨论】:

  • 试试这个...imgScrollView.contentSize = imgView.frame.size;

标签: iphone objective-c ios ipad uiscrollview


【解决方案1】:

那是因为滚动视图的边界大小大于内容大小。 内容大小需要是图像视图的实际大小,可见大小由框架/边界设置。我猜你想在 {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

【讨论】:

  • 所以帧大小必须小于 contentSize?如果框架大小与 contentSize 相同,那么它不会滚动?
  • 默认情况下,是。但是如果你将 alwaysBounceVertical 和 alwaysBounceHorizo​​ntal 设置为 YES(默认都是 NO),即使 contentSize 小于帧大小,你也可以拖动你的内容视图
  • 这让我抓狂,因为当 contentSize 小于边界大小时,滚动视图没有滚动。就我而言,我想在键盘出现时减小滚动视图的内容大小,我惊讶地发现减小内容大小不会使滚动视图滚动。猜猜,我必须改为更改滚动视图的框架。
【解决方案2】:

滚动视图内容大小应大于滚动视图框架的宽度和高度
这样做 -

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

我认为这会有所帮助。

【讨论】:

  • 不允许滚动,如果你想让scroller滚动,内容大小应该大于框架大小
【解决方案3】:

我知道这是旧的,但我想指出,当您在代码中创建 UIScrollView 时,最重要的设置是:

scrollView.scrollEnabled = YES;

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

【讨论】:

  • 这更适合作为评论,而不是答案。在任何情况下它都是误导性的:作为stated in the docsscrollEnabled 的默认值是YES。您不需要在代码中将scrollEnabled 设置为YES,除非您之前已将其设置为NO
  • 我不同意。它也可以作为答案。 (它刚刚解决了我的问题。谢谢克里斯。)很多人向下滚动查看答案,除非答案引导他们阅读所有(或任何)cmets,否则不要阅读。有时您正在使用其他人编写的代码,而您可能并不熟悉。
  • 我必须将我的设置为 YES 才能滚动。
【解决方案4】:

如果您尝试使用 IB 进行设置,请确保您的 UIScrollView 的 Height 属性设置为低于您的 contentView 的 Height 属性的数字。例如,如果您将 contentView 的高度设置为 810 pts,请确保将 UIScrollView 的高度设置为 610 pts 左右。

【讨论】:

    【解决方案5】:

    这样做的麻烦方法是始终将 contentSize 设置为大于视图大小。但是 Swift 中有一个属性允许滚动视图始终“滚动”,而不管内容大小:

    scrollView.alwaysBounceVertical = true
    

    还有一个用于水平滚动的

    【讨论】:

      猜你喜欢
      • 2014-11-02
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多