在单个视图控制器上支持多个方向
Posted
技术标签:
【中文标题】在单个视图控制器上支持多个方向【英文标题】:Supporting multiple orientations on a single view controller 【发布时间】:2014-06-09 00:25:10 【问题描述】:我正在尝试做一件非常简单的事情:在我的应用程序中只支持水平方向,除了 1 堆栈视图控制器。为简单起见,假设我有两个 UIViewController。我们称它们为 maskLandscapeVC 和 maskAllVC。每个都单独嵌入在其自己的自定义 UINavigationController 实例中。这是导航控制器的代码。
#import "MPTLoginNav.h"
@interface MPTLoginNav ()
@end
@implementation MPTLoginNav
- (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.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark
#pragma Interface Orientaiton Methods
- (NSUInteger)supportedInterfaceOrientations
if (self.isMaskAllStack)
return UIInterfaceOrientationMaskAll;
return UIInterfaceOrientationMaskLandscape;
- (BOOL)shouldAutorotate
return YES;
@end
在 maskLandscapeVC 上,此代码工作正常,只能使用两个水平方向。 用户可以从 maskLandscapeVC 导航到 maskAllVC。下面的代码可以解决这个问题
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle bundleForClass:[self class]]];
self.maskAllVC = [storyboard instantiateViewControllerWithIdentifier:@"maskAllVC"];
[self.navigationController pushViewController:self.maskAllVC animated:YES];
在 maskAllVC 中,代码也很有效,并且支持所有四个方向。
一旦在 maskAllVC 上,用户切换到 VERTICAL 方向。 maskLandscapeVC 是 maskAllVC 的代表。在 maskAllVC 上处于垂直方向时,用户按下了某个按钮。该按钮调用委托 (maskLandscapeVC),根据某些条件,maskLandscapeVC 决定关闭 maskAllVC。它使用以下代码
[self.maskAllVC.navigationController popViewControllerAnimated:YES];
[self.maskAllVC.navigationController dismissViewControllerAnimated:YES completion:nil];
现在回到 maskLandscapeVC,方向仍然是垂直的,当然我的视图因此而完全混乱。
【问题讨论】:
【参考方案1】:我认为因为你弹出它返回它并没有像第一次那样真正刷新整个 ViewController。使用 viewDidLoad 而不是 viewWillAppear 可能是问题所在。 viewDidLoad 只被调用一次。
如果设置断点,是否会进行完整的 layoutSubview 刷新?弹出时它是否会调用supportedInterfaceOrientations?如果将 viewDidLoad 代码移动到 viewWillAppear 会发生什么?
【讨论】:
以上是关于在单个视图控制器上支持多个方向的主要内容,如果未能解决你的问题,请参考以下文章