我在故事板中创建了一个UIScrollView,将其作为属性链接到视图控制器,现在我正在尝试添加一些带有分页的子视图。但是,即使我以图形方式设置故事板中的维度,UIScrollView的框架最终也是0,0,0,0。我是否需要对维度进行硬编码,即使我已经在故事板中以图形方式指定了它们?
另外,相关的是,是否可以自定义故事板中的子视图以在此滚动视图中使用?似乎我不能创建这样的视图,除非它已经在控制器中。由于我只有一个控制器和可能有多个视图,我想以图形方式设置,如何以编程方式执行此操作?
答案 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
中的滚动视图时,框架实际上会给出正确的数字。我之前在awakeFromNib
和viewDidLoad
中尝试了此操作,并且还获得了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 。