【发布时间】:2013-05-23 16:53:21
【问题描述】:
每个人都知道你不能相信 UIViewController init/viewDidLoad 方法的帧大小;这个:
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
在很多情况下会打印错误的尺寸(特别是在横向模式下它几乎被破坏了)
这实际上会返回始终正确的结果,因此最好布置子视图:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
问题是viewWillAppears 每次视图出现时都会被调用,因此不适合分配或添加子视图。因此,您最终会在界面中声明每个视图,并且最终会得到我根本不喜欢的巨大头文件,因为大多数项目在初始设置后不再需要任何操作.
所以问题一是:有没有更好的方法来处理子视图的定位?
问题二非常相关,假设我有一个 UIView 的子类,包括其他各种子视图。我在我的界面中声明它,并在我的 init/viewDidLoad 方法中分配/初始化它。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
正如我们已经知道的那样,我们现在需要在 viewWillAppear 中重新定位它以获得更准确的读数
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
问题是当然所有的子视图也需要重新定位。这是由自动调用的 layoutSubviews 函数完成的,但我们遇到了同样的问题:所有子视图都需要在 SNKSlidingMenu 类的接口内声明。有没有办法解决这个问题?
谢谢。
【问题讨论】:
-
使用自动布局,还是设置自动调整大小的蒙版?
标签: ios objective-c uiview