如何在初始化过程中尽早获取子视图帧
我正在改变一些代码从XIB到故事板。 设置故事板场景的子视图的帧边界的时间似乎存在实质性差异。
这个代码经常使用的技术是这样的:
- UIView子视图在XIB或Storyboard文件中定义了维度(允许程序员以外的其他人修改UI)
- UIViewController有一个指向
IBObject UIView *
对象的IBObject UIView *
- 在UIViewController的
- 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点宽。
在Storyboard下面,这不再适用于我:当我从控制器的viewWillAppear
方法调用时,我得到一个(0,0,0,0)的框架:
[18:09:16.901|4096] Dimensions for the color key are: 0.000000 0.000000
但是,从程序生命周期的后期运行(由一个button触发),我得到正确的结果:
[18:09:35.812|4096] Dimensions for the color key are: 36.000000 734.000000
在视图出现之前有什么方法可以获取这些信息吗? 我会这么认为,但是看起来似乎是实际呈现视图之前的最后一次机会。 还是有一些明显的开关,我错过了,这将使这项技术按预期工作?
谢谢
答案是在我的后续问题的答案中给出的…做这个东西的地方是布局完成后,在viewDidLayoutSubviews
我不清楚为什么信息从初始描述文件(无论是XIB还是Storyboard)中的数据早在viewDidLoad
可用到现在是(0,0,0,0),但是它与要知道你是否在书本和networking上学习了很多教程代码。
- 没有这样的模块IQKeyboardManagerSwift
- 以编程方式创建扩展的UItableViewCell
- tableView.reloadData()错误:对成员的模糊引用
- 从XIB文件实例化一个UIView作为文件的所有者?
- 从苹果网站导入configuration文件到其他mac
- 在将UICollectionViewLayout分配给UICollectionView之后,为什么UICollectionViewCells不再可见?
- 当用户按回家button时,调用哪个方法,然后再按两次返回
- “UIApplicationMain”属性不能在包含顶级代码的模块中使用
- IOS 8静默推送通知不工作,没有Xcode