1

我有 secondViewController 可以在横向和纵向视图中显示内容。MainViewController(secondViewController 的父级)只能在横向模式下显示内容。

当 SecondView 处于纵向模式并弹出时,MainViewController 视图(应该仅在横向模式下显示内容)以纵向显示内容。它不会刷新到横向模式。

有没有办法强制 MainViewController 刷新内容?

在 MainViewController 的 viewWillAppear 方法上,我添加了 setNeedsDisplay 和 layoutSubviews 等。

-(void) viewWillAppear:(BOOL)animated {
    [self.view setNeedsDisplay];
    [self.view layoutIfNeeded];
    [self.view layoutSubviews];
}

但它不会重新加载视图。我还尝试了导航控制器的委托方法 - willShowViewController 但它不起作用。

4

2 回答 2

1

我通过不让用户“返回”到另一个视图来解决类似的问题,除非应用程序处于正确的方向(在本例中为横向)。你可以做的是提供你自己的“返回”按钮,如果视图是纵向的,弹出一个警告说请先旋转到横向(或者更好的是从屏幕底部或顶部动画一个小视图)。或者只是隐藏或禁用纵向的后退按钮(我隐藏了按钮)。

无论如何,让用户返回并在手机处于纵向模式时查看横向视图是一个糟糕的 UI 选择。

于 2012-07-18T22:45:12.253 回答
1

看起来如果您删除视图并将其添加回来它可以工作

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if (UIDeviceOrientationIsPortrait(orientation)){        
    NSLog(@"force to landscape mode ");
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIView *view = [window.subviews objectAtIndex:0];
    [view removeFromSuperview];
    [window addSubview:view];        
}

您也可以使用 CGAffineTransformMakeRotation 但它的旋转在导航控制器上不起作用

    if (orientation == UIDeviceOrientationPortraitUpsideDown) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)];
        //[self.navigationController.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)];
    } else if (orientation == UIDeviceOrientationPortrait) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI/2.0)];
        //[self.navigationController.view setTransform:CGAffineTransformMakeRotation(M_PI/-2.0)];
    }
于 2012-07-18T22:48:55.373 回答