【问题标题】:UIScrollView will not scroll, even after content size setUIScrollView 不会滚动,即使在设置了内容大小之后
【发布时间】:2012-10-07 04:40:20
【问题描述】:

我的 UIScrollView 是一个约 4500 像素的水平视图,用户需要水平滚动才能查看内容。

我设置如下:

- (void)viewDidLoad
{

    [super viewDidLoad];

    sview.frame = CGRectMake(0, 0, 568, 320);
    sview.contentSize = CGSizeMake(4500, 320);
    [sview setScrollEnabled:YES];
}      

然而滚动视图什么也没做。有什么明显的我错过了吗?我已经尝试过网络上的每个教程。

【问题讨论】:

  • 也有。仍然没有滚动。
  • 你在哪里添加代表要滚动的内容的子视图?
  • 您是以编程方式添加滚动视图还是?
  • 设置委托方法,除非您使用 xibs,否则 UIScrollView 委托应该已经链接到文件所有者......
  • 它将水平滚动

标签: iphone ios uiscrollview


【解决方案1】:

首先,您必须向 UIScrollSiew 添加一些内容作为滚动子视图,如果 UIScrollView 上没有内容,您如何滚动?这是我所做的,只需将 UIImageView 添加到 UIScrollView 作为大小与 UIScrollView 大小相同的子视图...

在 viewDidLoad 方法中尝试以下代码..

-(void)viewDidLoad
{
     UIScrollView *scroll=[[UIScrollView alloc] init];
     scroll.frame=CGRectMake(0, 0, 320, 460);
     UIImageView *imageView=[[UIImageView alloc] init];
     imageView.frame=CGRectMake(0, 0, 320,460);
     imageView.image=[UIImage imageNamed:@"chiranjeevi.jpeg"];
     scroll.contentSize = CGSizeMake(4500, 460);
     [scroll setScrollEnabled:YES];
     [scroll addSubview:imageView];
     [self.view addSubview:scroll];

}

我测试了这段代码,它运行良好。我希望这段代码对你有所帮助..

【讨论】:

  • 也许尝试通过xib将UIScrollView添加到UIViewcontroller的UIView的解决方案?这才是真正的问题
【解决方案2】:

我假设您在 Xib 文件中添加 UISrollingView。这对你有用。

sview.delegate = self;
sview.backgroundColor=[UIColor clearColor];
[sview setCanCancelContentTouches:NO];
sview.indicatorStyle = UIScrollViewIndicatorStyleWhite;
sview.clipsToBounds = YES;
sview.scrollEnabled = YES;
sview.contentSize = CGSizeMake(320,570);
CGPoint topOffset = CGPointMake(0,0);
[sview setContentOffset:topOffset animated:YES];

另外,请确保在您的 Xib 文件中提供 IBOutlet 连接。

【讨论】:

  • 没有帮助我很抱歉.... 即使将 contentsize 设置为 3000,仍然无法滚动浏览整个内容
【解决方案3】:

我也遇到了同样的问题。我在 xib 中添加了滚动视图。我还在这个滚动视图中添加了一些子视图。添加子视图后,滚动视图将停止滚动。这个问题的解决方案是在文件检查器中的视图的 xib 中检查了使用自动布局。我取消选中它,添加子视图后滚动视图滚动。

解决方案是在 xib 的文件检查器中取消选中 Use Autolayout。

【讨论】:

    【解决方案4】:

    我已经解释过here,但是这个问题有很多答案建议关闭自动布局。这解决了问题,但这并不是真正正确的解决方案。这是我的答案:


    Turning Auto Layout 有效,但 这不是解决方案。如果你真的需要Auto Layout,那就使用它,如果你不需要它,把它关掉。但这不是此解决方案的正确解决方案。

    UIScrollView 与自动布局中的其他视图的工作方式不同。这是自动布局的Apple's release note,我复制了有趣的部分:

    以下是有关 UIScrollView 的自动布局支持的一些说明:

    • 通常,自动布局将视图的顶部、左侧、底部和右侧边缘视为可见边缘。也就是说,如果您将视图固定到 它的超级视图的左边缘,你真的把它固定在 超级视图边界的最小 x 值。更改边界原点 父视图的位置不会改变视图的位置。
    • UIScrollView 类通过更改其边界的原点来滚动其内容。为了使这项工作与自动布局一起使用,顶部、左侧、底部、 滚动视图中的右边缘现在意味着其内容的边缘 查看。
    • 对滚动视图的子视图的约束必须导致要填充的大小,然后将其解释为 滚动视图。 (这不应与 用于自动布局的 intrinsicContentSize 方法。)调整滚动的大小 具有自动布局的视图框架,约束必须是显式的 关于滚动视图的宽度和高度,或 滚动视图必须绑定到其子树之外的视图。
    • 请注意,您可以通过创建约束使滚动视图的子视图看起来浮动(不滚动)在其他滚动内容之上 在视图和滚动视图的子树之外的视图之间,例如 滚动视图的超级视图。

    Apple 接着展示了如何正确使用 UIScrollView 和 Auto Layout 的示例。

    作为一般规则,最简单的解决方法之一是在元素到 UIScrollView 底部之间创建一个约束。因此,在您希望位于 UIScrollView 底部的元素中,创建此底部空间约束:

    再一次,如果您不想使用自动布局,请将其关闭。然后您可以按照通常的方式设置contentSize。但你应该明白,这是 Auto Layout 的预期行为。

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题。我做了以下修改,scrollView 开始为我滚动:

      1. 选择以检查 UIScrollView 的“水平弹跳”属性 在西布。
      2. 将以下代码移动到 viewDidAppear 而不是 viewDidLoad:
      -(void) viewDidAppear:(BOOL)animated
      {
      
          [super viewDidAppear:animated];
          sview.frame = CGRectMake(0, 0, 568, 320);
          sview.contentSize = CGSizeMake(4500, 320);
          [sview setScrollEnabled:YES];
      
      }
      

      我认为这应该对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 2014-02-11
        • 2017-01-26
        相关资源
        最近更新 更多