3

我在我的故事板中制作了一个滚动视图,其中包含几个UIImageView

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

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

4

6 回答 6

8

修好了!

事实上,我在 iOS 6.0 上开发应用程序,我不得不取消选中情节提要属性上的“使用自动布局”复选框......

无论如何感谢所有人!

于 2012-10-21T00:51:22.910 回答
4

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

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

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

<Error>: CGAffineTransformInvert: singular matrix.

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

这似乎运作良好,虽然我不能确定为什么。我猜它让滚动视图有机会正确设置其边界。

于 2013-02-11T02:33:50.123 回答
4

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

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

- (void)viewDidLayoutSubviews

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

@property (assign, nonatomic) BOOL initialLayoutComplete;

然后你可以这样写你的 viewDidLayoutSubviews :

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    if (!self.initialLayoutComplete) {
        // frame dependent code here...
    }
}
于 2013-08-20T16:30:44.133 回答
3

正如我在这个答案viewWillAppear中提到的:在您使用该方法之前,滚动视图的框架不会被初始化。

这似乎是 iOS 6 中的一种新行为,不确定是错误还是有意更改。

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

于 2013-02-25T03:28:24.970 回答
0

你连接 IBOutlet 了吗?

您是否使用以下代码初始化了滚动视图:

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?

于 2012-10-20T23:06:46.320 回答
0

我认为下面对 Enrico 的评论进行了澄清。帧大小将在 viewDidAppear 处具有正确的值(并且在 viewWillAppear 中将设置该值,但在该方法中它们仍然为零)

于 2013-04-23T16:14:25.157 回答