【问题标题】:Most efficient way to have UIViewController view fill out all of usable space?让 UIViewController 视图填满所有可用空间的最有效方法是什么?
【发布时间】:2019-09-06 19:44:21
【问题描述】:

我有一个通用的单视图应用程序,底部有一个UINavigationBartoolbar,然后UIViewControllerview 占据了其余的空间。

我通常以编程方式完成所有操作,因此很长一段时间以来,我一直在手动计算 UIViewController's view frame loadView,同时考虑到设备可能具有的所有组件,即主页指示器新 iPhone 设备上的高度,旧设备上的不透明状态栏。

但是,对于所有新设备,我发现这种方式效率低下,并考虑切换到情节提要或 xib。我从来没有真正使用过这些,所以我不明白它是如何工作的。例如,如果我创建一个故事板,其中 ViewController 的视图占据了可用区域的整个大小,这是否适用于所有设备?旋转时会正确调整大小吗?

总的来说,我有点想知道,创建一个应用程序的最优雅/最有效的方式是什么?

【问题讨论】:

    标签: ios uiview uiviewcontroller storyboard xib


    【解决方案1】:

    我通常以编程方式完成所有操作,因此很长时间以来我一直在 loadView 中手动计算 UIViewController 的视图框架

    从来没有必要这样做;您可以删除该代码。导航控制器本身会为其子视图控制器的视图提供正确的框架!

    要做的就是为子视图控制器的视图subviews提供正确的定位。 that 是你应该做的事情,只需给它们自动布局约束,这样无论视图控制器的视图最终是什么大小,它们都会被正确排列。您可以在代码中或通过故事板做到这一点;没有区别。

    总的来说,我有点想知道,创建一个 UIViewController 的视图占据所有设备屏幕的整个可用区域(包括手机旋转时)的应用程序的最优雅/最有效的方法是什么?

    优雅高效的方法是:什么都不做。这就是已经自动发生的事情,无需您的输入。

    【讨论】:

    • 谢谢@matt。那改变了吗?当我开始这样做时,就像在 2012 年一样。我不记得为什么了,也许是我自己的理解能力差,或者我想当时出于某种原因我不得不手动重新定位视图(可能是因为我的不稳定设计)。所以你是说我应该停止覆盖 loadView,如果是这样,将子视图附加到 UIViewController 的视图的最佳方法是什么? viewDidMoveToSuperview 还是什么?
    • 自己调整视图控制器的视图大小总是错误的(而且毫无结果)。它的大小(并且一直是)由它的父级您的loadView 之后调整大小。也许您的计算非常好,所以您没有注意到这一点! — 只需使用显示工具栏且不显示导航栏(如果需要)的导航控制器作为应用的根视图控制器,您将自动获得您所描述的效果。
    • 当然,可能是您以某种奇怪的手动方式将视图控制器的视图插入另一个视图控制器的视图,这也可能是错误的,但是您没有显示该代码,所以我不能评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多