我创建了一个UIViewController子类,并且发现UIViewController中的-loadView的默认实现会以一种奇怪的方式忽略我的帧大小设置。
为了简化它并确保它确实不是我的代码的错误,我直接使用UIViewController的简单实例进行了一个干净的测试,而不是创建一个子类。结果是一样的。我尝试制作320 x 320的精确二次视图,但视图看起来像320 x 200。
iPhone OS 3.0,请查看:
UIViewController *ts = [[UIViewController alloc] initWithNibName:nil bundle:nil];
ts.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 320.0f);
ts.view.backgroundColor = [UIColor cyanColor];
[self.view addSubview:ts.view];
你可以看到,我这样做:
1)创建一个UIViewController实例
2)将视图的框架设置为320 x 320
的二次尺寸3)给它一种颜色,所以我可以看到它
4)将其添加为子视图。
现在这个部分,更奇怪的是:当我自己实现-loadView时,即如果我把这些代码放在那里:
- (void)loadView {
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 320.0f)];
v.backgroundColor = [UIColor cyanColor];
self.view = v;
[v release];
}
然后它看起来正确。
现在让我们考虑一下:在第一个例子中,我做的几乎完全相同,只是我让UIViewController自己创建视图,然后接受它以更改它的帧。正确?
那么为什么我会收到这个奇怪的错误?现在,我认为没有别的方法可以纠正这种错误的行为。我没有激活像clipsToBounds那样的东西,也没有其他代码可以触及它。
答案 0 :(得分:1)
不应更改视图控制器视图的尺寸。它应该自动调整以适应窗口或父控制器的大小。
如果你真的需要一个方形视图,请进行子视图。
// Note: better do this in -loadView or -viewDidLoad.
UIView* container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
[ts.view addSubview:container];
[container release];
// add stuff into the container view.
// ...