我在故事板中制作了一个包含多个UIImageView
的滚动视图。
问题是,该滚动视图的框架等于{0, 0, 0, 0}
,我不知道为什么。滚动视图在我的屏幕上可见,但我无法滚动它。
我已经尝试设置内容大小和框架,但没有成功。
答案 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中将设置值,但在该方法中它们仍为零)