我有一个应用程序,主要内容显示在支持所有界面方向的窗口中,而某些内容显示在另一个仅支持肖像的窗口中。这种方法大部分都可以正常工作,除了在呈现纵向窗口时将设备旋转到横向时,状态栏仍然会旋转到横向(内容保持纵向)。
即使隐藏了全方位窗口,即使它从未被设为关键,也是如此。这是iOS中的错误吗?我认为关键窗口应该确定状态栏的方向。
这是一个展示问题的最小应用程序:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var allOrientationsWindow: UIWindow!
var portraitWindow: UIWindow!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.allOrientationsWindow = createOrientationWindow(.All)
self.allOrientationsWindow.hidden = true
self.portraitWindow = createOrientationWindow(.Portrait)
self.portraitWindow.makeKeyAndVisible()
return true
}
func createOrientationWindow(orientations: UIInterfaceOrientationMask) -> UIWindow {
let window = UIWindow(frame: UIScreen.mainScreen().bounds)
let viewController = OrientationsViewController(orientations: orientations)
window.rootViewController = viewController
viewController.view.backgroundColor = UIColor.whiteColor()
return window
}
}
class OrientationsViewController: UIViewController {
var supportedOrientations: UIInterfaceOrientationMask
init(orientations: UIInterfaceOrientationMask) {
self.supportedOrientations = orientations
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
let label = UILabel(frame: CGRect(x: 50, y: 50, width: 50, height: 50))
label.text = "Hello"
self.view.addSubview(label)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return self.supportedOrientations
}
override func prefersStatusBarHidden() -> Bool {
return false
}
}
这是输出:
答案 0 :(得分:0)
来自文档:
通常,系统仅在根视图上调用此方法 窗口的控制器或呈现的视图控制器填充 整个屏幕;子视图控制器使用窗口的一部分 由他们的父视图控制器提供给他们,不再 直接参与有关支持轮换的决策。 应用程序的方向掩码和视图的交集 控制器的方向掩码用于确定哪个 方向控制器可以旋转到。
这个控制器是否嵌入了什么?或者这些其他条件是否与您的情况不一致?
另外,您是否尝试在
- application:supportedInterfaceOrientationsForWindow:
中使用AppDelegate
?