0

我在子类中有这段代码UIViewController

- (id)init {
    self = [super init];

    if (self) {            
        self.view.frame = [PDToolbox screenFrame];
        self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

        self.view.backgroundColor = [UIColor redColor];
    }

    return self;
}

就任何旋转方法而言,我唯一拥有的是:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

然而,在屏幕旋转到横向后,在视图上执行 NSLog 会显示:

<UIView: 0x10061640; frame = (0 0; 320 480); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x10061670>>

我不明白它为什么要进行这种转换,而不是像平常一样旋转?这意味着我在旋转后放置在其顶部并设置为视图大小的任何视图最终都位于 320x480 位置。

编辑:

人们不理解。所以我在它上面放了一个视图,与 UIView 大小相同,使用:

UIView *anotherView = [UIView alloc] initWithFrame:controller.view.bounds];
[controller.view addSubview:anotherView];

如果我以纵向添加另一个视图,则另一个视图以纵向显示,框架为 320x480。

如果我在横向添加anotherView,anotherView 出现在横向中,但仍然具有320x480 的框架,因为出于某种未知原因,controller.view 的框架仍然是这样的。

4

2 回答 2

0

您的视图/控制器层次结构是什么样的?在我看来,某些东西正在您的视图上设置 90° 旋转变换,而不是更改视图的框架。如果您自己不这样做,则可能是父视图或视图控制器。

于 2012-07-12T16:42:45.127 回答
0

框架和边界是非常不同的东西。您应该阅读 Apple 的View Geometry指南- 它包含许多对我来说非常宝贵的信息。

您的界限始终为 320x480,因为有人在设置您的transform(影响frame,但不影响bounds)。

确保您的视图控制器的视图的超级视图已autoresizesSubviews设置为YES,并且添加的任何子视图都具有适当autoresizingMask的 s。

于 2012-07-12T16:56:46.930 回答