Mic*_*all 50 iphone cocoa-touch uikit uiview
我有一个带有a的应用程序,UITabController每个选项卡都是一个UINavigationController.我UINavigationControllers的一个根是一个UIViewController.
在视图控制器的视图中,我想布局一些子视图,但我很困惑在哪里以及如何以与分辨率无关的方式布局它们(即不是硬编码值,如320px,480px,44px等. ).
当视图完全加载并呈现在垂直iPhone上时,它的高度将是367px = 480-20(状态栏) - 44(导航栏) - 49(标签栏).
在视图控制器中,我当前在viewDidLoad方法中创建了所有子视图.但是,在此方法中,视图的当前高度似乎是460px(self.view.bounds.size.height).因此,在设置我的子视图时,我无法正确计算任何内容的大小.
在该viewWillAppear:方法中,视图确实知道它的大小合适,但这意味着每次出现视图时设置和计算子视图的帧(例如,选项卡更改或从导航堆栈上的子视图控制器弹出).
这是正确布局的唯一方法viewWillAppear:吗?
我尝试过使用autoresizing属性(parent's autoresizesSubviews&autoresizingMask),但它们似乎根本不起作用!?这些仅在视图全部设置后才生效,然后调整大小(手动/方向更改?).
如果有人能让我知道为什么自动调整不起作用,以及如何通过不对任何大小的硬编码来解决问题,我将不胜感激.
aum*_*ets 44
你可以做你的布局逻辑里面viewWillLayoutSubviews的UIViewController.
-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
// Your layout logic here
}
Run Code Online (Sandbox Code Playgroud)
DOC:在调用视图控制器视图的layoutSubviews方法之前调用.子类可以根据需要实现.默认值是nop.
Den*_*kem 35
autoresizesSubviews应该在父视图autoresizingMask上设置,同时应该在子视图上设置 - 这是我犯的错误,所以你也可以.
在loadView您应该调整子视图的大小以适应当前父视图的大小,然后在父视图从460到367像素的大小调整后,您的子视图也将根据上面的掩码设置调整大小.
如果失败,那么设置视图大小没有任何问题viewWillAppear- 每次执行此操作对性能的影响可以忽略不计.
如果没有其他工作,总会有layoutSubviews:- 如果必须,你可以做手动布局,当系统认为布局可能需要改变时调用它.还有setNeedsLayout:我有时会从viewWillRotate:/ viewDidRotate:等等调用.但实际上这不应该是必需的,自动调整应该足够好.
编辑:是的,要实现自定义布局逻辑,layoutSubviews如上所述,需要子类UIView.
| 归档时间: |
|
| 查看次数: |
46291 次 |
| 最近记录: |