こんにちは, 今回は最近はまったUINavigationControllerとUIViewController,
English
UIViewControllerのOrientationの固定方法はいろいろなところで述べられています
が, ここに
UINavigationControllerをはさむといろいろおこります.
Storyboardやxibを使っている場合は特に問題ないはずですが, コードでガリガリUIを書いている場合は, こういった問題があります
オリジナルは
こちら(English)
早速いきましょう
ViewController画面固定
この例では, portraitにしています
@interface FixOrientationViewController ()
@end
@implementation FixOrientationViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view setBackgroundColor:[UIColor whiteColor]];
}
#pragma mark - Orientation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // iOS5
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(BOOL) shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
@end
#pragma mark 以下の部分がキーです.
その部分からが, portraitのfixコードです
これを通常のコードで呼び出すと, 特に問題なく画面が固定されます
問題のあるコード
UINavigationContrllerを入れます
FixOrientationViewController *controller = [[FixOrientationViewController alloc] init];
[controller setTitle:@"Bee"];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];
[self presentViewController:nav animated:YES completion:nil]; // FixOrientationViewController setting doesn't work
そうすると, UINavigationContrllerが加わるのと同時に, 中に存在するはずのFixOrientationViewControllerが画面固定されなくなります
対処法
UINavigationControllerをextendsしてportrait固定のUINavigationControllerをつくってしまおうというのがアイディアです
@interface FixNavViewController ()
@end
@implementation FixNavViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
#pragma mark - Orientation
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // iOS5
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(BOOL) shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
あらためてこれを使ってコードを書きます
FixOrientationViewController *controller = [[FixOrientationViewController alloc] init];
[controller setTitle:@"Bee"];
FixNavViewController *nav = [[FixNavViewController alloc] initWithRootViewController:controller];
[self presentViewController:nav animated:YES completion:nil];
0 件のコメント:
コメントを投稿