基于Apple论坛上的the discussing,此方法适用于iOS< 11设备(但> iOS 6)
这可以防止任何轮换。
- (BOOL)shouldAutorotate
{
return NO;
}
这只会旋转为纵向(正面朝上或上下颠倒)。
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait + UIInterfaceOrientationMaskPortraitUpsideDown;
}
但是,它无法在iOS 11 Beta 9上运行;
如果您的应用程序允许所有方向,但只想使用此方法将MainViewController设置为Portrait。
如果您按住设备架构并启动应用程序,则在启动屏幕后,statusBar将位于屏幕顶部(横向显示时),并且您的视图仍为纵向。
如果您使用方法切换rootViewController like this answer,您将结束以横向强制显示的横向渲染视图。
像这样的一些示例图:
齿轮图标位于正确的位置,但它来自库。其他一切看起来像风景。
由于
答案 0 :(得分:1)
没有足够的声誉点来回复@Vishal16 answer ...它对我有所帮助。
我想允许iPad上的所有视图控制器上的所有方向和iPhone上的大多数视图控制器的肖像,我希望它在swift中,所以这是我稍微修改过的版本:
在您的app delegate中:
var isPortrait = true
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if UIDevice.current.userInterfaceIdiom == .pad || !isPortrait {
return .all
}
return .portrait
}
然后准备(对于segue:......
(UIApplication.shared.delegate as? AppDelegate)?.isPortrait = true
使用false表示在segue上旋转视图控制器,对其他人使用true。
享受!
答案 1 :(得分:0)
当您呈现任何viewController时,AppDelegate会自动调用此方法进行强制旋转。我正在使用它,它在我的所有应用程序中完美无瑕
<强> AppDelegate.m 强>
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if (self.isPotrait) {
return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskPortraitUpsideDown;
}
return UIInterfaceOrientationMaskAll;
}
定义属性:
@property (assign, nonatomic) BOOL isPotrait;
在prepareForSegue方法中调用如下:
if ([segue.identifier isEqualToString:@"segue_ID"]){
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate setIsPotrait:true];
YourViewController *yourVC = [segue destinationViewController];
}
希望这对你有所帮助。 快乐的编码:)