ios - 如何在初始化过程中及早获取 subview 帧
<p><p>我正在将一些代码从 XIB 更改为 Storyboard 。设置 Storyboard 场景的 subview 的帧边界的时间似乎存在很大差异。</p>
<p>这段代码经常使用的技术是这样的:</p>
<ul>
<li>UIViewsubview 具有在 XIB 或 Storyboard文件中定义的尺寸(允许程序员以外的其他人修改 UI)</li>
<li>UIViewController 有一个到对象的链接,作为 <code>IBObject UIView *</code></li>
<li>在 UIViewController 的 <code>-viewWillAppear()</code> 中,会进行某些计算并根据这些计算完成绘制。</li>
</ul>
<p>例如,在我们的 XIB 或 Storyboard 文件中,我们希望将 UIView 分成四个区域。 Controller 查看该 UIView 的边界,查看其框架,然后在 UIView 中绘制四个框,每个框的大小为四分之一。</p>
<p>在.h中:</p>
<pre><code>IBOutlet UIView *outputColorKeyView;
</code></pre>
<p>在.m的<code>viewWillAppear</code>中:</p>
<pre><code>CGRect keyBounds = ;
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);
</code></pre>
<p>我的问题是,在 XIB 下,这很好用:我能够看到我必须绘制的区域的尺寸是 200 磅宽(例如),而单元格可以绘制 50 磅宽。</p>
<p>在 Storyboards 下,这不再适用于我:当我从 Controller 的 <code>viewWillAppear</code> 方法调用时,我得到一个 (0,0,0,0) 的帧:</p>
<p><code> 颜色键的尺寸为:0.000000 0.000000</code></p>
<p>但是,从程序生命周期的后期运行(由按钮触发),我得到了正确的结果:</p>
<p><code> 颜色键的尺寸为:36.000000 734.000000</code></p>
<p>有没有办法在 View 出现之前获取这些信息?我会这么认为,但 <code>viewWillAppear</code> 似乎是实际呈现 View 之前的最后机会。或者是否有一些我遗漏的明显开关可以使这项技术按预期工作?</p>
<p>谢谢</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>答案在我的 <a href="https://stackoverflow.com/questions/13406574/gettting-subviews-frames-in-storyboard" rel="noreferrer noopener nofollow">followup question</a> 中给出。 ...做这些事情的地方是在布局完成之后,在 <code>viewDidLayoutSubviews</code></p>
<p>我不清楚为什么信息会发生变化,从最初的描述文件(无论是 XIB 还是 Storyboard)中的数据早在 <code>viewDidLoad</code> 就可以使用到现在的 (0,0,0 ,0),但<em></em>如果您遵循书籍和网络上的大量教程代码,则需要注意这一点。</p></p>
<p style="font-size: 20px;">关于ios - 如何在初始化过程中及早获取 subview 帧,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/13389750/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/13389750/
</a>
</p>
页:
[1]