在故事板中创建的ScrollView使用框架0,0,0,0初始化

时间:2012-06-18 21:03:16

标签: ios uiscrollview storyboard

我在故事板中创建了一个UIScrollView,将其作为属性链接到视图控制器,现在我正在尝试添加一些带有分页的子视图。但是,即使我以图形方式设置故事板中的维度,UIScrollView的框架最终也是0,0,0,0。我是否需要对维度进行硬编码,即使我已经在故事板中以图形方式指定了它们?

另外,相关的是,是否可以自定义故事板中的子视图以在此滚动视图中使用?似乎我不能创建这样的视图,除非它已经在控制器中。由于我只有一个控制器和可能有多个视图,我想以图形方式设置,如何以编程方式执行此操作?

5 个答案:

答案 0 :(得分:16)

使用故事板 viewDidLayoutSubviews ,您可以获取所有视图的大小。 viewWillAppear 对我不起作用并且总是返回(0,0,0,0);

答案 1 :(得分:3)

对于故事板,控制器的出口在viewDidLoad之前没有连接,并且在viewWillAppear之前没有设置它的大小,请参见此处:

http://cs193p.m2m.at/lecture-8/

  

一旦控制器完全实例化并且其出口就是   连接viewDidLoad:被调用。因此,这是一个放置的好地方   设置代码。然而,控制器的大小尚未设置,但在   viewWillAppear:在视图出现之前调用   屏幕。

所以我认为Enricos的建议是正确的。只需尝试将与大小相关的内容放入viewWillAppear。

答案 2 :(得分:1)

我发现当我访问viewWillAppear中的滚动视图时,框架实际上会给出正确的数字。我之前在awakeFromNibviewDidLoad中尝试了此操作,并且还获得了0,0,0,0帧。

在Storyboard之前有什么奇怪之处,你可以在awakeFromNib中获得正确的帧尺寸。这方面的一个例子是Apple的示例代码PageControl

简而言之,回答问题,尝试从viewWillAppear访问它(假设您在故事板中创建了UIScrollView)。

答案 3 :(得分:0)

您可能在尚未设置视图的行上设置断点。试试这个:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        CGRect frame = self.scrollView.frame;
        NSLog (@"FRAME IS %@", NSStringFromCGRect(frame));
    }
    return self;
}

答案 4 :(得分:0)

这很简单:在Storyboard设置中禁用使用Autolayout

Disable Use Autolayout in the Storyboard settings (red rectangle)