これにより、稼働状態になります。最終的には、カテゴリを使用する代わりに、これらのUIKitクラスをサブクラス化する必要がありますが、残念ながら、iOS 6でまだ修正されていないサードパーティのライブラリでは機能しません。これらのカテゴリは、他の人のコードをいじくり回すことなく、すべてで機能するはずです。
サブクラス化(またはカテゴリの記述)を伴わないUITabBarController
または問題の解決策はまだ見ていません。UINavigationController
でも、存在したいのですが。
Prefix.pchファイルの先頭にある3つの.hファイル(または、すべてを1つのファイルに追加することを選択した場合は1つ)をインポートしてください。このコードができるだけ早く読み込まれることを確認する必要があります。
UITabBarController + LegacyRotation.h
#import <UIKit/UIKit.h>
@interface UITabBarController (LegacyRotation)
@end
UITabBarController + LegacyRotation.m
#import "UITabBarController+LegacyRotation.h"
@implementation UITabBarController (LegacyRotation)
- (NSUInteger)supportedInterfaceOrientations
{
return [self.selectedViewController supportedInterfaceOrientations];
}
- (BOOL)shouldAutorotate
{
return [self.selectedViewController shouldAutorotate];
}
@end
UINavigationController + LegacyRotation.h
#import <UIKit/UIKit.h>
@interface UINavigationController (LegacyRotation)
@end
UINavigationController + LegacyRotation.m
#import "UINavigationController+LegacyRotation.h"
@implementation UINavigationController (LegacyRotation)
- (NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
- (BOOL)shouldAutorotate
{
return [self.topViewController shouldAutorotate];
}
@end
UIViewController + LegacyRotation.h
#import <UIKit/UIKit.h>
@interface UIViewController (LegacyRotation)
@end
UIViewController + LegacyRotation.m
#import "UIViewController+LegacyRotation.h"
@implementation UIViewController (LegacyRotation)
- (NSUInteger)supportedInterfaceOrientations
{
NSUInteger ret = 0;
if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]) {
ret |= UIInterfaceOrientationMaskPortrait;
}
if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown]) {
ret |= UIInterfaceOrientationMaskPortraitUpsideDown;
}
if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]) {
ret |= UIInterfaceOrientationMaskLandscapeLeft;
}
if ([self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]) {
ret |= UIInterfaceOrientationMaskLandscapeRight;
}
return ret;
}
- (BOOL)shouldAutorotate
{
return YES;
}
@end