故事板中创建的UIScrollView的帧值为零

时间:2012-10-20 22:40:58

标签: iphone objective-c ios uiscrollview storyboard

我在故事板中制作了一个包含多个UIImageView的滚动视图。

问题是,该滚动视图的框架等于{0, 0, 0, 0},我不知道为什么。滚动视图在我的屏幕上可见,但我无法滚动它。

我已经尝试设置内容大小和框架,但没有成功。

6 个答案:

答案 0 :(得分:8)

修正了它!

事实上,我在iOS 6.0上开发应用程序,我不得不取消选中storyboard属性上的“use autolayout”复选框...

非常感谢所有人!

答案 1 :(得分:4)

我也遇到了这个问题,但我需要使用自动布局。

我试图将UIImageView设置为子视图,然后执行一些计算以计算最小,最大缩放比例并设置zoomScale。

问题是我试图将zoomScale设置为零,因为滚动视图框架为零,这给了我这个错误:

<Error>: CGAffineTransformInvert: singular matrix.

所以我在viewDidLoad / viewWillAppear中设置了image和imageView(并隐藏了imageView),然后在viewDidAppear中设置了zoomScale(然后取消隐藏了imageView)。

这似乎运作良好,虽然我不能肯定地说明原因。我想它给滚动视图提供了正确设置其边界的机会。

答案 2 :(得分:3)

正如我在this answer中提到的:在您使用viewWillAppear方法之前,不会初始化scrollview的框架。

这似乎是iOS 6中的一种新行为,不确定它是否是一个错误或故意改变。

您应该可以使用自动布局而不必担心这一点。

答案 3 :(得分:3)

这里的问题是AutoLayout,正如其他一些答案所表明的那样。具体来说,问题是自动布局直到viewWillAppear之后才会发生,并且如果你将代码放在viewDidAppear中,当你在用户观看时改变屏幕上的内容时,你会得到时髦的显示工件......

如果您需要启用AutoLayout,则放置帧相关代码的最佳位置是:

- (void)viewDidLayoutSubviews

请记住,这会被一次又一次地调用,所以如果你只想运行一次初始化代码,当显示视图时,你可以创建一个BOOL属性来存储初始布局是否已经完成。

@property (assign, nonatomic) BOOL initialLayoutComplete;

然后你可以用这种方式编写viewDidLayoutSubviews:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    if (!self.initialLayoutComplete) {
        // frame dependent code here...
    }
}

答案 4 :(得分:0)

您是否连接了IBOutlet?

您是否使用以下代码初始化scrollView:

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 280, 360)];
self.scrollView.contentSize = CGSizeMake(500, 360);
//values are of course only example values

如何将UIImageView添加到scrollView?

答案 5 :(得分:0)

我认为以下对恩里科的评论有一个澄清。 帧大小在viewDidAppear处具有正确的值(并且在viewWillAppear中将设置值,但在该方法中它们仍为零)