iphone - UIViewController 中 subview 的布局和大小

标签 iphone cocoa-touch uikit uiview

我有一个带有 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: 中进行布局的唯一方法吗?

我尝试使用自动调整大小属性(父级的 autoresizesSubviewsautoresizingMask),但它们似乎根本不起作用!?这些是否仅在 View 全部设置完毕然后调整大小(手动/方向更改?)后才生效。

如果有人能让我知道为什么自动调整大小不起作用,以及如何通过不硬编码任何尺寸来最好地布局,我将不胜感激。

最佳答案

您可以在 UIViewControllerviewWillLayoutSubviews 内执行布局逻辑。

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    // Your layout logic here
}

DOC:在调用 View Controller 的 View 的layoutSubviews 方法之前调用。子类可以根据需要实现。默认值为 nop。

关于iphone - UIViewController 中 subview 的布局和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2037716/

相关文章:

在比 SDK 更新的 iOS 上进行 iPhone IOS 设备测试

ios - 我怎样才能普遍禁用横向?

iPhone:如何使用 NSUserDefaults 存储 UIImage?

ios - Sprite Kit,移除 Sprite 进行碰撞

iphone - 更新到 Xcode 4.6 后出现超过 1000 个编译器错误

iphone - UISplitViewController 与 NavigationControllers(包括示例代码)

iPhone 。 UIToolbar 不适用于某些按钮

ios - 使用 beginUpdates/endUpdates 时,UISearchBar 从 tableHeaderView 中消失

ios - [UITableView indexPathsForVisibleRows] 可能存在错误?

iphone - UIPopoverController 没有箭头?