可能是重复问题:
“Incorrect” frame / window size after re-orientation in iPhone
我正在解决我的一个应用程序中非常令人沮丧的问题 - 在研究它时,我可能发现了iOS中的一个错误:
当您旋转iPad时,视图会旋转,但其框架不会更改。 我运行一个定时器,每秒打印我的视图的宽度和高度,尽管我可以在视觉上看到视图旋转,但无论如何,框架始终为“768x1024”。
根据Apple的文档:
当用户界面旋转时,窗口会被调整大小以匹配新的方向。 窗口调整其根视图控制器的框架以匹配新的大小,这个大小反过来传播到其他视图的视图层次结构中。
这正是没有发生的事情,这给我带来了各种麻烦。 有人知道如何修复旋转以使框架更改吗?
重现步骤:
- 创建一个新的空项目
- 添加一个基本的UIViewController作为根视图
- 设置一个计时器以打印出根视图控制器的框架宽度和高度
- 运行你的应用程序,并将其旋转。这是我正在测试的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = [[UIViewController alloc] init];
NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height);
// 添加标签以确认方向 UILabel *orientationLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,30)]; orientationLabel.text = @"左上角"; [self.window.rootViewController.view addSubview: orientationLabel];
[NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(testScale) userInfo:nil repeats:YES];
self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
- (void) testScale { NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); }