iOS에서 Landscape 모드만 지원
Xcode
에서 대상을 선택하고 장치 오리엔테이션을 Landscape Left
및 Landscape Right
로 지정합니다.다음에,
UIWindow
의 root view controller 이 경우 UINavigationController
의 서브 클래스 MyNavigationController
라든가를 준비해, 다음의 메소드를 오버라이드(override) 합니다. Landscape 모드만이라든지 말하면서, 실레와, topViewController
에 supportedInterfaceOrientations
를 묻고 그것을 돌려줍니다.MyNavigationController.swift
class MyNavigationController: UINavigationController {
// ...
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return self.topViewController?.supportedInterfaceOrientations ?? .landscape
}
// ...
}
그리고 navigation view controller 의 root view controller 에도 이런 식으로 메소드를 오버라이드(override) 합니다.
MyViewController.swift
class MyViewController: UIViewController {
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscape
}
}
그런데, 실행해 보면, iPhone에서는 랜드스케이프 고정이 됩니다만, iPad에서는 View가
landscape
와 portrait
에 회전이 일어나 버립니다. Stack Overflow 를 조금 검색해도, 대체로 이 근처에서 좋은 것들이 써 있었습니다. Application Delegate
의 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
를 구현하면 된다고 하는 쓰기가 있었습니다만, 원래, iPad 에서는 그것조차 불리지 않습니다.포기하고 공개 질문을 만드는 느낌으로, 검증용 프로젝트를 만들어GitHub에 공개할 생각으로 준비를 시작했습니다.
이것이 검증 프로젝트입니다. iPad에서는 회전해 버리는 상태로 공개되고 있습니다.
htps : // 기주 b. 코 m / 코 ly x x / 엔 r 후세 오리 엔타치 온 - 2018
그런데 이것을 준비하는 동안 대답을 찾아 버렸습니다. 어떤 검색 키워드를 사용했는지 기억하지 못하지만 검색 키워드에서 결과가 크게 다른 것은 조금 아프다.
SupportedInterfaceOrientations not called in iPad
If 'Requires full screen' setting from 'General' is enable, will allow the orientation delegate methods shouldAutorotate, preferredInterfaceOrientation, and supportedInterfaceOrientations to fire.
결과에서 말하면,
info.plist
의 Require full screen
를 on
로 해 두면, 제대로 iPad 에서도 supportedInterfaceOrientations
가 불리게 되었습니다.대신 multitasking 기능을 사용할 수 없다는 이야기도 있지만, 게임이나 일부 앱 등 어른의 사정으로 랜드스케이프 고정이 바람직한 앱도 있으므로, 그 경우는 이 방법으로 괜찮은 것 같습니다.
시도하지는 않지만
portrait
고정의 경우에도 마찬가지입니다.쓰기 시 Xcode와 Swift 버전은 다음과 같습니다.
Xcode Version 9.2 (9C40b)
Apple Swift version 4.0.3 (swiftlang-900.0.74.1 clang-900.0.39.2)
Target: x86_64-apple-macosx10.9
Reference
이 문제에 관하여(iOS에서 Landscape 모드만 지원), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/codelynx/items/e68252153bcaed9a3784텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)