我有一个带有 UITabController
的应用程序,每个选项卡都是一个 UINavigationController
。我的一个 UINavigationControllers
的根是一个 UIViewController
。
在该 View Controller 的 View 中,我想布局一些 subview ,但我很困惑在哪里以及如何以与分辨率无关的方式布局它们(即不是硬编码值,例如 320px、480px、44px等)。
当 View 完全加载并在垂直 iPhone 上呈现时,其高度将为 367px = 480 - 20(状态栏)- 44(导航栏)- 49(标签栏)。
在 View Controller 内,我当前在 viewDidLoad
方法中创建所有 subview 。但是,在此方法中, View 的当前高度似乎是 460px (self.view.bounds.size.height
)。因此,在设置 subview 时,我无法正确计算任何内容的大小。
在 viewWillAppear:
方法中, View 确实知道它的正确大小,但这意味着每次 View 出现时都要设置和计算 subview 的框架(例如选项卡)更改或从导航堆栈上的 subview Controller 弹出。
这是正确执行此操作以在 viewWillAppear:
中进行布局的唯一方法吗?
我尝试使用自动调整大小属性(父级的 autoresizesSubviews
和 autoresizingMask
),但它们似乎根本不起作用!?这些是否仅在 View 全部设置完毕然后调整大小(手动/方向更改?)后才生效。
如果有人能让我知道为什么自动调整大小不起作用,以及如何通过不硬编码任何尺寸来最好地布局,我将不胜感激。
最佳答案
您可以在 UIViewController
的 viewWillLayoutSubviews
内执行布局逻辑。
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
// Your layout logic here
}
DOC:在调用 View Controller 的 View 的layoutSubviews 方法之前调用。子类可以根据需要实现。默认值为 nop。
关于iphone - UIViewController 中 subview 的布局和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037716/