iPhone: UIScrollView无法滚动?但是已经设置了contentsize..?

7

大家好,

我有一些数据,想要在导航栈中展示它们的新视图。

我创建了一个新的带有XIB文件的视图控制器类。然后我编辑了XIB文件并放置了以下层次结构:

1 files owner
2 first responder
3 scrollview
3.1 view
3.1.1 label1
3.1.2 label2
3.1.3 label3
3.1.4 image4

我安排了标签和图片。标签的内容可能不同,它们应该动态调整大小。我还在视图控制器类中完成了IBOutlets并正确连接了一切。文件所有者的视图委托设置为视图。 然后我加载视图控制器,在“viewDidLoad”方法中执行以下操作:
- (void)viewDidLoad {
[super viewDidLoad];

self.currentPageURL.text = [self.offerItem objectForKey: @"page-url"];
self.currentPrice.text = [self.offerItem objectForKey: @"price"];
self.currentRank.text = [self.offerItem objectForKey: @"rank"];
self.currentName.text = [self.offerItem objectForKey: @"name"];
self.currentProducerName.text = [self.offerItem objectForKey: @"producer-name"];

self.currentDescription.text = [self.offerItem objectForKey: @"description"];

self.imageViewForImage.image = [helperClass resizeImage:[self.offerItem objectForKey: @"picture"] forSize:CGSizeMake(280.0, 280.0) ];

[theScrollview setScrollEnabled:YES];
[theScrollview setContentSize:CGSizeMake(320, 1200)];
[theScrollview flashScrollIndicators];

[theScrollview addSubview:theView];

当我在模拟器中启动应用程序时,一切都显示出来,但如果我尝试滚动,什么也不会发生。

我做错了什么?


视图 3.1 的帧大小是多少? - Deepak Danduprolu
我在 IB 中将尺寸设置为 320x1200。滚动视图也在 IB 中设置为 320x1200。 - dac
3个回答

20

在视图加载后,自动布局会设置一些约束条件,因此,请将在viewDidLoad中设置内容大小的代码移到viewDidAppear中,这样您的代码就不会被重写。

这对我有效。

-(void)viewDidAppear:(BOOL)animated{
  [self.scrollView setContentSize:CGSizeMake(320, 1000)];
}

对于我的英语不好,我很抱歉。


1
对我有用!你可以通过计算scrollview中的内容宽度/高度,而不是使用CGSizeMake。 - wspruijt

11

请确保在IB文档属性中未勾选“使用自动布局”(Use Autolayout)。我遇到了完全相同的问题,已正确设置内容大小,但启用此功能后,滚动始终被禁用。

需要关闭 Use Autolayout

更新 若要使用自动布局,请在viewDidAppear方法中明确设置scrollView内容的宽度和高度,如下所示:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    // set the scrollview to the specified size
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    [scrollView setContentSize:CGSizeMake(screenRect.size.width, 1100)];

    [scrollView setBounds:CGRectMake(0, 0, screenRect.size.width, screenRect.size.height)];

    [scrollView setScrollIndicatorInsets:UIEdgeInsetsFromString(@"{0,0,0,-1.0}")];

}

为什么这样工作?你应该在viewDidAppear中声明内容! - david

4

立即将theScrollView的框架更改为320x480,您应该会看到滚动。


1
我已经这样做了,但问题仍然存在。在IB中,scrollview为320x480,下面的视图为320x1200。 - dac
所以基本上你能看到部分内容但无法滚动?userInteractionEnabled属性呢?它被设置为YES了吗? - Deepak Danduprolu
是的,它在IB中设置,并且我在ViewDidLoad方法中额外添加了[theScrollview setUserInteractionEnabled:YES]; 但没有反应,无法滚动... 我上面发布的堆栈是否正确?scrollview有一个子视图吗?scrollview具有iPhone屏幕的尺寸,而视图具有整个内容的尺寸吗? - dac
2
等一下?3.1 中的 view 是指 self.view 吗? - Deepak Danduprolu
1
就是这样,感谢Deepak的帮助!!问题在于我没有将文件所有者的标准视图输出设置为滚动视图,它仍然设置为视图3.1。 我将“视图”标准输出设置为滚动视图,现在一切都正常了! 哦,天啊,我花了5个小时才弄清楚这个问题。 再次感谢Deepak! - dac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接