2010-03-27 43 views
0

我创建了一个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,并没有其他代码触及此。

回答

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. 
    // ... 
+0

如果我手动调整视图控制器的视图大小,苹果是否会拒绝我的应用程序? – dontWatchMyProfile 2010-03-28 12:04:16

+0

@mystify:不需要,因为视图控制器可能会以某种未知的方式调整视图的大小,所以编程很麻烦。 – kennytm 2010-03-28 12:11:36

相关问题