在iOS 8之前,我们将下面的代码与supportedInterfaceOrientations和shouldAutoRotate委托方法结合使用,以强制应用程序方向指向任何特定方向.我使用下面的代码段以编程方式将应用程序旋转到所需的方向.首先,我正在改变状态栏方向.然后只显示并立即关闭模态视图会将视图旋转到所需的方向.
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)
但这在iOS 8中失败了.而且,我已经看到堆栈溢出的一些答案,人们建议我们应该始终从iOS 8开始避免这种方法.
更具体地说,我的应用程序是一种通用类型的应用程序.总共有三个控制器.
First View控制器 - 它应该支持iPad中的所有方向,并且只支持iPhone中的纵向(主页按钮).
第二视图控制器 - 它应该只支持所有条件下的横向
第三视图控制器 - 它应该只支持所有条件下的风景
我们使用导航控制器进行页面导航.从第一个视图控制器,在按钮单击操作上,我们在堆栈上推送第二个.因此,当第二个视图控制器到达时,无论设备方向如何,应用程序都应仅锁定横向.
下面是我shouldAutorotate和supportedInterfaceOrientations第二和第三视图控制器中的方法.
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate {
return NO;
}
Run Code Online (Sandbox Code Playgroud)
对于这种或任何更好的方法来锁定iOS 8的特定方向的视图控制器是否有任何解决方案.请帮忙!!
我有一个支持方向更改的iPad应用程序的嵌套视图层次结构.它看起来与以下类似.
UIViewController
UIView
- UIView
- UIImageView (disable rotation)
- UIImageView
- UIView (disable rotation)
- UIView
- UIView
...
Run Code Online (Sandbox Code Playgroud)
我想锁定一些子视图的方向,同时允许其他人自动旋转和调整大小.我似乎无法弄清楚如何实现这一目标.
一种方法似乎是手动旋转子视图willAnimateRotationToInterfaceOrientation:.鉴于SDK正在执行我将要撤消的轮换,这并不是特别有吸引力.
有没有办法简单地禁用子视图的方向更改或其他方法来重构我的层次结构?
对于 UIKit 禁用设备旋转动画,您可以重写 viewWillTransitionToSize 方法。 禁用方向改变旋转动画 但是在 SwiftUI 中实现这一点的最佳方法是什么?
当屏幕方向从横向更改为纵向时,如何更改或禁用旋转动画,反之亦然?
ios ×3
objective-c ×2
animation ×1
autorotate ×1
ios8 ×1
ipad ×1
iphone ×1
orientation ×1
swiftui ×1
uiview ×1