我已经用谷歌搜索了几个小时而没有运气,所以我来找你们这些来救我吧!
显然,我无法找到关于如何做到这一点(或最佳方式)的正确信息。我有一个支持肖像和风景的应用程序(虽然不支持颠倒)。但是,纵向和横向视图完全不同,因此我需要使用两个视图来表示每个视图。假设我在故事板中需要3个viewcontrollers(主要是一个,然后一个用于肖像,一个用于风景?我是否会使用两个但是我没有看到如果我从肖像开始,并且然后需要加载横向,我将不得不删除肖像,这是我的代码所在的位置?
我的viewcontroller有正确的约束来保持标签顶部居中,但是当以编程方式替换或交换视图时,似乎不会调用自动调整大小。我最后通过重置子视图上的帧来修复此问题,但现在当设备颠倒翻转时,纵向标签将永远向右移动。所以我想知道正确的方法,因为我确信这不可能。
就代码而言,我有一个obj-c viewcontroller类,其中包含以下修改过的方法......
@interface AMBViewController ()
@property (strong, nonatomic) UIViewController *portraitViewController;
@property (strong, nonatomic) UIViewController *landscapeViewController;
@end
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIApplication *app = [UIApplication sharedApplication];
UIInterfaceOrientation currentOrientation = app.statusBarOrientation;
[self doLayoutForOrientation:currentOrientation];
}
-(void) willAnimateRotationToInterfaceOrientation:
(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self doLayoutForOrientation:toInterfaceOrientation];
}
-(void) doLayoutForOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation)) {
self.portraitViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Portrait"];
if (self.landscapeViewController != nil ) {
[self.landscapeViewController.view removeFromSuperview];
self.landscapeViewController = nil;
}
self.portraitViewController.view.frame = self.view.bounds;
[self.view insertSubview:self.portraitViewController.view atIndex:0];
} else {
self.landscapeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Landscape"];
if (self.portraitViewController != nil ) {
[self.portraitViewController.view removeFromSuperview];
self.portraitViewController = nil;
}
self.landscapeViewController.view.frame = self.view.bounds;
[self.view insertSubview:self.landscapeViewController.view atIndex:0];
}
}
为了清楚我的故事板,我有一个空白根控制器(子类AMBViewController)和另外两个视图控制器“Landscape”和“Portrait”
我可能还会提到,如果您将设备旋转一整圈(4个右侧或4个左侧旋转),标签仅在纵向视图中脱落。如果你向右走(现在它是颠倒的)但是然后向左走,它仍然很好。只有当屏幕从右/左景观翻转到左/右景观时,它才会混乱。真的很奇怪,我知道我必须省略一些重要的事情。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
解决方案:找到位于Apple's Dev Site的指南(最后)后,我能够使用segues和模态窗口找到解决方案。第一视图控制器是纵向,第二视图控制器是横向,通过模态segue连接。第一个视图控制器具有以下修改方法:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
_isShowingLandscapeView = NO;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
-(void) orientationChanged:(NSNotification *)notification {
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (UIInterfaceOrientationIsPortrait(orientation) && _isShowingLandscapeView
&& orientation != UIInterfaceOrientationPortraitUpsideDown) {
[self dismissViewControllerAnimated:NO completion:nil];
_isShowingLandscapeView = NO;
} else if (UIInterfaceOrientationIsLandscape(orientation) && !_isShowingLandscapeView ) {
[self performSegueWithIdentifier:@"ShowLandscape" sender:self];
_isShowingLandscapeView = YES;
}
}
感谢所有可能已经调查过的人!