我有一个应用程序,当方向更改时使用以下方式更改视图:[[UIApplication sharedApplication] statusBarOrientation]。在iPhone上,它可以工作,但在iPad上,它给了我风景而不是肖像和肖像,而不是风景。
以下是我用来计算相关框架的代码:
编辑:使用rob5408的建议。更改为使用UI_USER_INTERFACE_IDIOM()。
+ (CGRect)getRelevantFrame {
//Get orientation
UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { //iPhone/iPod
if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
return [self frameiPhoneLandscape];
}
else {
return [self frameiPhonePortrait];
}
} else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { //iPad
if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
NSLog(@"iPad Landscape");
return [self frameiPadLandscape];
}
else {
NSLog(@"iPad Portrait");
return [self frameiPadPortrait];
}
}
return CGRectMake(0, 0, 0, 0);
}
以下是我使用的通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
以下是我用来阅读方向更改的代码:
- (void) didRotate:(NSNotification *)notification
{
NSLog(@"Parent: %@", self.parentController);
if(self.parentController) {
[self setFrame:[TASFrames getRelevantFrame]];
}
}
答案 0 :(得分:0)
我将代码转移到了一个新项目。而现在它的工作原理应该如此。不知道为什么会这样。代码没有改变。