iOS 設(shè)置全局橫屏燎字,特定頁(yè)面允許橫屏

如果在 info.plist 或 TARGETS --> General --> Deployment Info 里配置了支持橫屏的方向
且 手機(jī)有設(shè)置允許橫屏
此時(shí) App 頁(yè)面是跟隨手機(jī)設(shè)備的狀態(tài)而橫豎屏的

場(chǎng)景一恭应、如果我手機(jī)鎖定(如下圖)
則 此時(shí) App 頁(yè)面 只可以是豎屏的狀態(tài)

進(jìn)階版:如果已在 AppDelegate.m 里設(shè)置了禁止全局橫屏邢羔,特定頁(yè)面想要實(shí)現(xiàn)允許橫屏鸦采,如何操作荸百?
- (UIInterfaceOrientationMask)application:(UIApplication *)application
  supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskPortrait; // 默認(rèn)全局不支持橫屏
}
是需要修改代碼邏輯的囚似,具體操作如下:

1剩拢、在 AppDelegate.h 添加以下屬性:

// 是否 允許橫屏的 標(biāo)記 
@property (nonatomic,assign)BOOL allowRotation;

2、在 Appdelegate.m 添加如下代碼:

- (UIInterfaceOrientationMask)application:(UIApplication *)application
  supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    if (self.allowRotation) { // 如果設(shè)置了 allowRotation 屬性饶唤,支持全屏
        return UIInterfaceOrientationMaskAll;
    }
    return UIInterfaceOrientationMaskPortrait; // 默認(rèn)全局不支持橫屏
}

3徐伐、在需要支持橫屏的界面改變 allowRotation 屬性

// 進(jìn)入全屏
- (void)enterViewAction {
    
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.allowRotation = YES;
    
    if (@available(iOS 16.0, *)) {

        [self setNeedsUpdateOfSupportedInterfaceOrientations];
        [self.navigationController setNeedsUpdateOfSupportedInterfaceOrientations];
        NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
        UIWindowScene *scene = (UIWindowScene *)array[0];
        UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:UIInterfaceOrientationMaskLandscape];
        [scene requestGeometryUpdateWithPreferences:geometryPreferences
                                       errorHandler:^(NSError * _Nonnull error) {
            NSLog(@"\n== Error 了: %@", error);
        }];

    } else {

    }
 
}

// 退出全屏
- (void)quitViewAction {
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.allowRotation = NO;
    if (@available(iOS 16.0, *)) {
        // 同樣使用 requestGeometryUpdate 方法
    } else {
        // 強(qiáng)制歸正:
        if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
            SEL selector = NSSelectorFromString(@"setOrientation:");
            NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
            [invocation setSelector:selector];
            [invocation setTarget:[UIDevice currentDevice]];
            int val =UIInterfaceOrientationPortrait;
            [invocation setArgument:&val atIndex:2];
            [invocation invoke];
        }
        
    }
    
}

4、在 viewWillAppear 和 viewWillDisappear 分別調(diào)用以上方法募狂,在該控制器下即可順利支持全屏 办素。


下面方法可能在 iOS 16.0 + 上無(wú)效,還需要進(jìn)一步測(cè)試祸穷。

// 進(jìn)入全屏
- (void)enterViewAction {
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

// 退出全屏
- (void)quitViewAction {
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末性穿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雷滚,更是在濱河造成了極大的恐慌需曾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呆万,居然都是意外死亡刻蚯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)桑嘶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炊汹,“玉大人,你說(shuō)我怎么就攤上這事逃顶√直悖” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵以政,是天一觀的道長(zhǎng)霸褒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)盈蛮,這世上最難降的妖魔是什么废菱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮抖誉,結(jié)果婚禮上殊轴,老公的妹妹穿的比我還像新娘。我一直安慰自己袒炉,他們只是感情好旁理,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著我磁,像睡著了一般孽文。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夺艰,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天芋哭,我揣著相機(jī)與錄音,去河邊找鬼郁副。 笑死减牺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霞势。 我是一名探鬼主播烹植,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愕贡!你這毒婦竟也來(lái)了草雕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤固以,失蹤者是張志新(化名)和其女友劉穎墩虹,沒(méi)想到半個(gè)月后嘱巾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诫钓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年旬昭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菌湃。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡问拘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惧所,到底是詐尸還是另有隱情骤坐,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布下愈,位于F島的核電站纽绍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏势似。R本人自食惡果不足惜拌夏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望履因。 院中可真熱鬧障簿,春花似錦、人聲如沸搓逾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霞篡。三九已至,卻和暖如春端逼,著一層夾襖步出監(jiān)牢的瞬間朗兵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工顶滩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留余掖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓礁鲁,卻偏偏與公主長(zhǎng)得像盐欺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仅醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容