4

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

我已将其设置如下:

- (void)viewDidLoad
{

    [super viewDidLoad];

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

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

4

5 回答 5

5

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

  1. 选择以检查 xib 中 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];

}

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

于 2014-03-13T09:19:27.467 回答
4

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


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

UIScrollView与自动布局中的其他视图的工作方式不同。这是Apple关于自动布局的发行说明,我复制了有趣的部分:

以下是有关 UIScrollView 的自动布局支持的一些注意事项:

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

然后,Apple 继续展示如何正确使用UIScrollViewAuto Layout 的示例。

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

在此处输入图像描述

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

于 2014-01-22T04:20:15.667 回答
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];

}

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

于 2012-10-17T05:02:12.890 回答
0

我假设您在 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 连接。

于 2012-10-17T05:18:42.903 回答
-1

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

解决方案是在 xib 的文件检查器中取消选中使用自动布局。

于 2013-12-13T06:41:41.220 回答