菜鸟教程小白 发表于 2022-12-12 22:48:40

iOS - self.view.frame.size.width 为 0.00000


                                            <p><p>我有一个 ViewController(<code>SecondViewController</code>),它有一个名为 <code>setupHomeScreen</code> 的方法,该方法是从另一个 ViewController(<code>FirstViewController</code>) 调用的。此方法在 <em></em> <code>SecondViewController</code> 初始化后调用。</p>

<p>在 <code>setupHomeScreen</code> 中,创建了一个 <code>UIView</code>,我希望它具有与主视图相同的边界,这取决于 iPad 是纵向查看还是横向模式。</p>

<p>第一次调用该方法时(在应用启动时), View 完全错误,<code>NSLog</code> 输出显示 <code>self.view.frame.size.width</code> 等于 <code>0.0000</code>。</p>

<p>如果我导航到 <code>ThirdViewController</code>,然后返回 <code>SecondViewController</code>,则 View 会正确显示并且 <code>self.view.frame.size.width</code> 的值为 <code>768</code>。</p>

<p>我尝试了很多不同的方法来解决这个问题,比如将方法的内容放在 <code>didRotateFromInterfaceOrientation</code> 和 <code>viewDidAppear:</code> 方法中,但似乎没有任何效果。 </p>

<p>任何帮助将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>When the method is first called (which is on app startup), the view is
completely wrong, and an NSLog output shows the
self.view.frame.size.width is equal to 0.0000.</p>
</blockquote>

<p>这可能是因为 View 尚未加载。 ViewController 在真正需要它们之前不会加载它们的 View ,这通常是在 View 即将第一次显示时。如果您的代码在 View 显示之前尝试查找 View 的宽度,则很有可能该 View 尚未加载。在 Objective-C 中,您可以向 <code>nil</code> 发送消息,结果将是 0 或 nil,具体取决于预期的类型。</p>

<blockquote>
<p>If I navigate to ThirdViewController, and then back to
SecondViewController, the view is correctly displayed and the
self.view.frame.size.width value is 768.</p>
</blockquote>

<p>这和上面的解释是一致的;一旦你显示了你的 <code>SecondViewController</code>View 层次结构,这些 View 就会被加载,并且找到你的 View 的宽度是没有问题的。</p>

<p>只需访问 ViewController 的 <code>view</code> 属性就足以使 View 层次结构被加载。如果必须,您可以通过在调用 <code>setupHomeScreen</code> 之前访问 <code>self.view</code> 来解决您的问题。不过,更好的解决方案是在 <code>SecondViewController</code> 的 <code>-viewDidLoad</code> 方法中设置 View 的宽度,这将保持 ViewController 的“延迟加载”行为(并节省内存) 同时仍确保在需要时设置 View 的宽度。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS - self.view.frame.size.width 为 0.00000,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12558916/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12558916/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS - self.view.frame.size.width 为 0.00000