我正在尝试获取正确的内容框架大小,该大小考虑了导航栏的高度大小。
但是如果在willRotateTo~方法中使用NSLog输出帧大小,则显示较早的帧大小。
但是它在didRotateFrom~方法中显示正确的帧大小。
如何在willRotateTo~方法中获得类似didRotateFrom~大小的帧大小?
以下是AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
ViewController *rootView = [[[ViewController alloc] init] autorelease];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[[UINavigationController alloc] initWithRootViewController:rootView] autorelease];
} else {
self.viewController = [[[UINavigationController alloc] initWithRootViewController:rootView] autorelease];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
接下来是ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
NSLog(@"willRotate size is width : %f height : %f", self.view.frame.size.width, self.view.frame.size.height);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
NSLog(@"didRotate size is width : %f height : %f", self.view.frame.size.width, self.view.frame.size.height);
}
以下是旋转到横向时的结果。
/Users/nice7285/Library/Caches/appCode10/DerivedData/testView-d007adbb/Build/Products/Debug-iphonesimulator/testView.app/testView
Simulator session started with process 3896
2012-10-11 04:28:59.719 testView[3896:11303] willRotate size is width : 320.000000 height : 416.000000
2012-10-11 04:29:00.025 testView[3896:11303] didRotate size is width : 480.000000 height : 268.000000
答案 0 :(得分:7)
接受的答案并没有真正解决您所面临的问题。如果在didRotateFromInterfaceOrientation中执行UI更改,则UI会在屏幕执行其旋转动画后发生更改。这最终看起来非常丑陋和突然。
您应该使用willAnimateRotationToInterfaceOrientation,它在旋转发生后调用,边界已重新计算,并允许您为动画设置UI控件。这样您就可以执行从一个方向到另一个方向的平滑过渡。
答案 1 :(得分:0)
self.view.frame
willRotateToInterfaceOrientation
中的didRotateFromInterfaceOrientation
原因是在旋转之前为您提供尺寸,因为视图尚未旋转,因此框架尚未更改。那时你唯一能知道的就是你要转向的方向。如果您想要该功能中的新尺寸,您必须自己对它们进行硬编码。你不应该这样做,因为{{1}}应该能够做你想做的一切。