如何始终如一地确定正确的大小布局你的视图在loadView?
我有不同的情况下,一个UIViewController被推到一个UINavigationController,或者一个UITabBarController存在,或者两者都有。如果我硬编码值,这些元素会改变可用的屏幕区域,使其不一致。
在loadView被调用的那一刻,我想知道如何调整容器视图的大小,我添加了我的子视图。
我看了一下UIViewController指南,苹果使用了uisscreen mainScreen applicationFrame,但在他们的例子中,这是因为他们正在制作一个全屏应用程序。
我在这里看到了一些答案,但是没有一个解决如何以一致的方式做到这一点。
感谢您的帮助
你不需要知道确切的大小。风投不应该为自己设定规模,这是其母公司的责任。只要用苹果UIKit工程师Andy Matuschak在Twitter上确认的[[UIView alloc] init]
创建一个UIView
: https://twitter.com/andy_matuschak/status/365227892151558144
- (void) loadView {
//self.wantsFullScreenLayout = YES; //could add this for translucent status bars
UIView *view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
self.view = view;
}
摘自Apple的《视图控制器编程指南》以编程方式创建视图:
- 创建一个适合屏幕大小的根视图对象。根视图充当与视图控制器关联的所有其他视图的容器。你通常定义此视图的框架以匹配应用程序窗口的大小,该窗口本身应该填充屏幕上。但是,视图控制器也会根据需要调整帧大小以适应呈现各种视图的集合,例如系统状态栏、导航栏或标签栏。你可以使用一个通用的UIView对象,一个你定义的自定义视图,或者任何其他可以缩放来填充的视图屏幕。
然后它有一个类似于我上面写的例子
正确的答案可能是创建一个自定义UIView子类,并在layoutSubviews的重写中做所有的子视图视图定位。你的子类会被分配给self。
然而,它也可以使用viewDidLoad来添加一个相同大小的子视图到self.view。(不过您应该准备好这个视图可以改变大小。—正确设置autoresizingmask可以是一个很好的方法。)
我制作了一个应用程序,它加载了几个UITextViews, UIButtons和一个uissegment控件。在viewWillAppear中,我调用了一个resize方法
它以编程方式改变UIViewController中所有子视图的大小。这是因为在IB中自动调整大小只有这么好。
在我的calcViewSize函数中,我得到这样的尺寸;
CGFloat width = [[UIScreen mainScreen] applicationFrame].size.width;
CGFloat height = self.view.frame.size.height; //this will retrieve the frame we are drawn into.
然后我遍历UIViewController中我想要调整大小的每个子视图,并改变它的帧。我在IBOutlets中有这些视图的属性,所以我已经知道这些视图是什么了。
使用Interface Builder获取尺寸
最后一个注意事项:要在IB中更改尺寸,请选择视图,选择属性检查器,禁用状态栏,现在在大小检查器中,您可以调整视图的大小,重新排列子视图,并写下要放置在代码中的数字