为什么我的视图控制器不是二次方的?

时间:2010-03-27 19:44:42

标签: iphone

我创建了一个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那样的东西,也没有其他代码可以触及它。

1 个答案:

答案 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.
  // ...