Ios 在导航控制器弹出子视图后强制父视图刷新视图

Ios 在导航控制器弹出子视图后强制父视图刷新视图,ios,Ios,我有secondViewController,它可以在横向和纵向视图中显示内容。MainViewController(secondViewController的父级)只能以横向模式显示内容 当SecondView处于纵向模式并弹出时,MainViewController的视图(该视图应仅以横向模式显示内容)以纵向模式显示内容。它不会刷新到横向模式 有没有办法强制MainViewController刷新内容 在MainViewController的ViewWillExample方法中,我添加了se

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

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

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

在MainViewController的ViewWillExample方法中,我添加了setNeedsDisplay和LayoutSubView等

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

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

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


在任何情况下,当手机处于纵向模式时,让用户返回并在横向视图中查看视图都是一个糟糕的用户界面选择。

看起来如果您删除视图并将其添加回去,它会正常工作

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)];
    }

添加和删除视图也有效。由于某些原因,转换与navigationController存在一些问题。看到我下面的答案。所以,用户是在肖像,你做你的把戏,他们回去,他们看到一个视图,旋转90度,他们无法阅读它。所以他们说“哦,嘘,别这样”,然后把手机移到了风景区。好吧,如果你对这很满意的话。对我来说,这是一个可怕的解决方案,但正如他们所说,YMMV。secondView支持不同的方向,这在查看pdf等资源时非常有用。如果需要,用户可以更改secondView的方向。但我明白你的意思。