![](/img/trans.png)
[英]How to force a UIViewController to Portrait orientation in iOS 6
[英]iOS 11 Force UIViewController to portrait mode doesn't work
根據蘋果論壇上的討論 ,此方法在iOS <11設備(但> iOS 6)上很好用
這樣可以防止任何旋轉。
- (BOOL)shouldAutorotate
{
return NO;
}
這只會旋轉為縱向(正面朝上或上下顛倒)。
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait + UIInterfaceOrientationMaskPortraitUpsideDown;
}
但是,它不能在iOS 11 Beta 9上運行。
如果您有一個允許所有方向的應用程序,但只想使用此方法將MainViewController設置為Portrait。
如果按住設備橫向並啟動應用程序,則在啟動屏幕后,statusBar將位於屏幕頂部(橫向時),並且視圖仍為縱向。
如果您使用方法像這樣的答案來切換rootViewController,那么您將最終得到強制以縱向顯示的橫向渲染視圖。
像這樣的一些示例圖:
齒輪圖標位於正確的位置,但來自圖書館。 其他一切看起來都像風景。
謝謝
沒有足夠的聲譽積分來回復@ Vishal16的答案 ……這對我有所幫助。
我想在iPad上的所有視圖控制器上允許所有方向,而在iPhone上的大多數視圖控制器上則允許縱向模式,因此我希望盡快進行更改,因此這是我的稍作修改的版本:
在您的應用程序委托中:
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。
請享用!
當您出現任何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];
}
希望這對您有所幫助。 快樂的編碼:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.