我正在将一些代码从XIB更改为storyboard。设置故事板场景的子视图的帧边界的时间似乎存在很大差异。
此代码经常使用的技术是:
IBObject UIView *
- viewWillAppear()
中,进行了某些计算,并根据这些计算完成绘图。例如,在我们的XIB或Storyboard文件中,我们希望将UIView切割成四个区域。控制器查看该UIView的边界,查看其框架,然后在UIView中绘制四个框,每个框大小四分之一。
在.h:
IBOutlet UIView *outputColorKeyView;
在.m的viewWillAppear
:
CGRect keyBounds = [outputColorKeyView bounds];
float high = keyBounds.size.height;
float wide = keyBounds.size.width;
float cellWidth = wide/4.0;
XLog(@"Dimensions for the color key are: %f %f", high, wide);
我的问题是,在XIB下,这很好用:我能够看到我必须绘制的区域的尺寸是200点宽(例如),并且单元格可以绘制50点宽。 / p>
在故事板下,这对我来说不再适用:当我从控制器的viewWillAppear
方法调用时,我得到一个(0,0,0,0)的帧:
[18:09:16.901|4096] Dimensions for the color key are: 0.000000 0.000000
但是,从程序生命周期的后期运行(由按钮触发),我得到了正确的结果:
[18:09:35.812|4096] Dimensions for the color key are: 36.000000 734.000000
在视图出现之前,有没有办法获取此信息?我会这么认为,但viewWillAppear
似乎是实际呈现视图之前的最后机会。或者是否有一些我不知道的明显开关会使这种技术按预期工作?
由于
答案 0 :(得分:4)
答案是在我followup question的答案中给出的......在布局完成之后,在viewDidLayoutSubviews
我不清楚为什么信息会发生变化,从初始描述文件中的数据(无论是XIB还是故事板)到viewDidLoad
到现在为止(0,0,0,0) ,但如果您在书籍和网络上遵循了很多教程代码, 是一个区别。