View 生命周期中确定 UIScrollView 屏幕大小的最佳时间

Posted

技术标签:

【中文标题】View 生命周期中确定 UIScrollView 屏幕大小的最佳时间【英文标题】:Best time in View lifecycle to determine the on-screen size of a UIScrollView 【发布时间】:2013-06-25 20:17:45 【问题描述】:

我有一个 .xib 包含一个视图,该视图本身包含顶部和底部辅助视图(导航、页面控件)和一个 UIScrollView。它的高度取决于我是在 iPhone 4 还是 5(3.5" 或 4")上运行。在运行时,我将包含视图移到屏幕外,使用 UIButtons 填充滚动视图以构建可滚动的启动板,然后将其从底部滚动到屏幕上。点击一个按钮会显示另一个视图。

在较小的屏幕上,我只想在滚动视图中显示三个按钮,而在较大的屏幕上,我想显示四个。所以我需要知道滚动视图出现时的高度,在它实际出现之前。我希望在视图生命周期中的某个时刻(viewWillAppear 等)可以使用这些信息,但这似乎是唯一正确的地方是 viewDidAppear。此时视图已经出现在屏幕上,并且创建按钮意味着它们突然出现,并且在屏幕上没有很好地滚动。

.xib 中的***视图设置为 Retina 4 FullScreen。

我很高兴承认 viewWillAppear 是创建按钮的正确位置,并且我的导航控制器可能会错误地实例化视图,但我的 ios-fu 还不够强大,无法确定。

我的解决方案是检测屏幕尺寸并硬连线按钮高度。有没有更好(更优雅、面向未来和规范)的方法来做到这一点?

【问题讨论】:

viewWillAppear 应该有适当的界限。它在视图的框架设置好并且即将出现后调用。我们可以看一点代码吗? 【参考方案1】:

别担心,你的方向是对的:

viewWillAppear 是视图生命周期中的正确方法,其中该视图及其子视图的框架已完全计算出来,尚未绘制任何内容。您可以在此处对视图的标准行为进行更正。

当调用 viewDidAppear 时,您将获得与 viewWillAppear 中相同的关于视图元素位置和大小的信息。但是此时,动画和视图本身已经绘制好了。

也就是说,您为什么要使用 viewWillApear。

【讨论】:

以上是关于View 生命周期中确定 UIScrollView 屏幕大小的最佳时间的主要内容,如果未能解决你的问题,请参考以下文章

android中view的生命周期

深入懂得android view 生命周期

在ViewController中View的生命周期

iOS:捋一遍View的生命周期

深入理解android view 生命周期

控制器view生命周期