我需要为纵向和横向使用不同的 xib 文件。我没有使用自动布局,但我使用的是 iOS6。(如果你关心为什么,请参阅我之前的问题。)
我正在关注 Adam 对这个问题的回答,该问题使用 amergin 的 initWithNib 名称技巧进行了修改,并根据我自己的 iPhone/iPad 需求进行了修改。这是我的代码:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[[NSBundle mainBundle] loadNibNamed:[self xibNameForDeviceAndRotation:toInterfaceOrientation]
owner: self
options: nil];
[self viewDidLoad];
}
- (NSString *) xibNameForDeviceAndRotation:(UIInterfaceOrientation)toInterfaceOrientation
{
NSString *xibName ;
NSString *deviceName ;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
deviceName = @"iPad";
} else {
deviceName = @"iPhone";
}
if( UIInterfaceOrientationIsLandscape(toInterfaceOrientation) )
{
xibName = [NSString stringWithFormat:@"%@-Landscape", NSStringFromClass([self class])];
if([[NSBundle mainBundle] pathForResource:xibName ofType:@"nib"] != nil) {
return xibName;
} else {
xibName = [NSString stringWithFormat:@"%@_%@-Landscape", NSStringFromClass([self class]), deviceName];
if([[NSBundle mainBundle] pathForResource:xibName ofType:@"nib"] != nil) {
return xibName;
} else {
NSAssert(FALSE, @"Missing xib");
return nil;
}
}
} else {
xibName = [NSString stringWithFormat:@"%@", NSStringFromClass([self class])];
if([[NSBundle mainBundle] pathForResource:xibName ofType:@"nib"] != nil) {
return xibName;
} else {
xibName = [NSString stringWithFormat:@"%@_%@", NSStringFromClass([self class]), deviceName];
if([[NSBundle mainBundle] pathForResource:xibName ofType:@"nib"] != nil) {
return xibName;
} else {
NSAssert(FALSE, @"Missing xib");
return nil;
}
}
}
}
当然我正在做:
- (BOOL) shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
在我的视图控制器中,并且:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown);
}
在我的代表中。
我有两个可能相关的问题。第一,简单的。我不倒转。我为 iPad 和 iPhone 在 xcode 中打开了所有正确的位。这可能是一个单独的问题,也可能是我问题的核心。
真正的问题是,当我旋转到横向模式时,我的 xib 被替换,但视图偏离了 90 度。
这是我的 2 xib 的样子。(我给它们上色了,所以你可以看到它们是不同的。)
和
当我运行它(最初在横向模式下)时,您可以看到横向 xib 是正确的。
当我旋转到纵向时,它也是正确的
但是当我旋转回横向时,xib 被替换,但视图关闭了 90 度。
这里有什么问题?