我创建了一个UIViewController子类,并发现UIViewController中-loadView的默认实现会以一种奇怪的方式忽略我的帧大小设置。为什么我的视图控制器视图不是二次的?
为了简化它并确保它不是我的代码的错误,我直接使用UIViewController的简单实例进行了干净的测试,而不是创建子类。结果是一样的。我尽量让320×320的确切二次观点,但似乎认为像320×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×320
3)给它的颜色的二次尺寸,所以可以发ee it
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,并没有其他代码触及此。
如果我手动调整视图控制器的视图大小,苹果是否会拒绝我的应用程序? – dontWatchMyProfile 2010-03-28 12:04:16
@mystify:不需要,因为视图控制器可能会以某种未知的方式调整视图的大小,所以编程很麻烦。 – kennytm 2010-03-28 12:11:36