我在我的故事板中制作了一个滚动视图,其中包含几个UIImageView
。
问题是,该滚动视图的框架等于{0, 0, 0, 0}
,我不知道为什么。滚动视图在我的屏幕上可见,但我无法滚动它。
我已经尝试设置内容大小和框架,但没有成功。
我在我的故事板中制作了一个滚动视图,其中包含几个UIImageView
。
问题是,该滚动视图的框架等于{0, 0, 0, 0}
,我不知道为什么。滚动视图在我的屏幕上可见,但我无法滚动它。
我已经尝试设置内容大小和框架,但没有成功。
修好了!
事实上,我在 iOS 6.0 上开发应用程序,我不得不取消选中情节提要属性上的“使用自动布局”复选框......
无论如何感谢所有人!
我也遇到了这个问题,但我需要使用自动布局。
我试图将 UIImageView 设置为子视图,然后进行一些计算以计算出最小、最大缩放比例并设置 zoomScale。
问题是我试图将 zoomScale 设置为零,因为滚动视图框架为零,这给了我这个错误:
<Error>: CGAffineTransformInvert: singular matrix.
所以我在 viewDidLoad / viewWillAppear 中设置了图像和 imageView(并隐藏了 imageView),然后在 viewDidAppear 中设置了 zoomScale(然后取消隐藏 imageView)。
这似乎运作良好,虽然我不能确定为什么。我猜它让滚动视图有机会正确设置其边界。
正如其他一些答案所表明的那样,这里的问题是 AutoLayout。具体来说,问题是直到 viewWillAppear 之后才会发生自动布局,如果您将代码放在 viewDidAppear 中,当您在用户观看时更改屏幕上的内容时,您将获得时髦的显示工件......
如果您需要启用 AutoLayout,则放置框架相关代码的最佳位置是:
- (void)viewDidLayoutSubviews
请记住,虽然它会一次又一次地调用,所以如果您只希望一些初始化代码运行一次,当视图显示时,您可以创建一个 BOOL 属性来存储初始布局是否已经完成。
@property (assign, nonatomic) BOOL initialLayoutComplete;
然后你可以这样写你的 viewDidLayoutSubviews :
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (!self.initialLayoutComplete) {
// frame dependent code here...
}
}
正如我在这个答案viewWillAppear
中提到的:在您使用该方法之前,滚动视图的框架不会被初始化。
这似乎是 iOS 6 中的一种新行为,不确定是错误还是有意更改。
您应该能够使用自动布局而不必担心这一点。
你连接 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?
我认为下面对 Enrico 的评论进行了澄清。帧大小将在 viewDidAppear 处具有正确的值(并且在 viewWillAppear 中将设置该值,但在该方法中它们仍然为零)