我有secondViewController,可以在横向和纵向视图中显示内容。 MainViewController(secondViewController的父级)只能以横向模式显示内容。
当SecondView处于纵向模式并弹出时,MainViewController(应该仅以横向模式显示内容)的视图以纵向显示内容。它不会刷新到横向模式。
有没有办法强制MainViewController刷新内容?
在MainViewController的viewWillAppear方法中,我添加了setNeedsDisplay和layoutSubviews等。
-(void) viewWillAppear:(BOOL)animated {
[self.view setNeedsDisplay];
[self.view layoutIfNeeded];
[self.view layoutSubviews];
}
但它没有重新加载视图。我还尝试了导航控制器的委托方法 - willShowViewController,但它无法正常工作。
答案 0 :(得分:1)
我解决了类似的问题,不让用户“返回”到另一个视图,除非应用程序处于正确的方向(在本例中为Landscape)。你可以做的是提供你自己的“后退”按钮,如果视图是在肖像中,则弹出一个警告,说明请先旋转到横向(或者更好,然后从屏幕的底部或顶部动画一个小视图)。或者只是纵向隐藏或禁用后退按钮(我隐藏了按钮)。
让用户回去是一个糟糕的用户界面选择,并且无论如何在手机处于纵向模式时都能看到横向视图。
答案 1 :(得分: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)];
}