gpt4 book ai didi

iOS 8 - UIWindow 方向始终为纵向

转载 作者:搜寻专家 更新时间:2023-11-01 06:48:18 24 4
gpt4 key购买 nike

我正在将一个 iOS 6 应用程序更新到 iOS 8 (iPad),我创建的任何新 UIWindows 总是以纵向模式显示。该应用程序最初同时支持纵向和横向,但现在将仅支持横向。

我已将项目文件中支持的方向更改为横向左和横向右。正如预期的那样,整个 UI 以横向显示,但是当我创建一个新的 UIWindow 时,它以纵向显示。新的 UIWindow 的框架与屏幕的框架完全匹配,所以我无法想象它为什么/如何以纵向模式显示。

下面的代码是我用来创建和显示新的 UIWindow 的代码,它充当模式:

var modalWindow:UIWindow = UIWindow(frame: self.view.window!.bounds)

modalWindow.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.66)
modalWindow.hidden = false
modalWindow.windowLevel = (UIWindowLevelStatusBar + 1)

modalWindow.addSubview(customView)

modalWindow.makeKeyAndVisible()

我已经为此苦苦挣扎了几个小时; UIWindow 不应该默认处于横向模式吗,因为该应用仅支持横向方向?

如果有任何关于如何解决此问题的建议,我将不胜感激。

编辑:

我刚刚创建了一个新的测试应用程序,它只支持 Landscape Left 和 Landscape Right,那里也出现了这个问题。这是一个错误吗?我似乎无法理解为什么 UIWindow 会认为应用程序处于横向模式时处于纵向模式。

最佳答案

编辑(2015 年 7 月 2 日)

这个答案在 iOS 8.3+ 和可能的 iOS 8 以前版本中失效。我不建议任何人使用它,特别是因为它不能保证在未来的 iOS 版本中工作。

我的新解决方案使用标准 presentViewController UIViewController 的方法.我初始化一个 UIViewController ,添加我的自定义模式 View作为 UIViewController 的 subview , 然后定位模态 View使用约束。就像一个魅力!


原始答案

我离开了一段时间,但今天决定回来。我最终将模态窗口旋转 -90 度,因为它会自动旋转 90 度以纵向显示。我还为模态窗口的宽度和高度添加了一个小计算以支持 iOS 7 和 iOS 8。这是我的新代码:

// Get the screen size
var screenSize:CGSize = UIScreen.mainScreen().bounds.size

// Use the larger value of the width and the height since the width should be larger in Landscape
// This is needed to support iOS 7 since iOS 8 changed how the screen bounds are calculated
var widthToUse:CGFloat = (screenSize.width > screenSize.height) ? screenSize.width : screenSize.height

// Use the remaining value (width or height) as the height
var heightToUse:CGFloat = (widthToUse == screenSize.width ? screenSize.height : screenSize.width)

// Create a new modal window, which will take up the entire space of the screen
var modalWindow:UIWindow = UIWindow(frame: CGRect(x: 0, y: 0, width: widthToUse, height: heightToUse))

modalWindow.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.66)
modalWindow.hidden = false
modalWindow.windowLevel = (UIWindowLevelStatusBar + 1)

modalWindow.addSubview(customView)

// Create a -90 degree transform since the modal is always displayed in portrait for some reason
var newTransform:CGAffineTransform = CGAffineTransformMakeRotation(CGFloat(-M_PI / 2))

// Set the transform on the modal window
modalWindow.transform = newTransform

// Set the X and Y position of the modal window to 0
modalWindow.frame.origin.x = 0
modalWindow.frame.origin.y = 0

modalWindow.makeKeyAndVisible()

如前所述,这在 iOS 7+ 和 iOS 8+ 上都运行良好!使用 subview 时,请注意模式的 widthheight值被切换,因为它以纵向显示。所以,如果你想水平居中一个 subview ,使用模态窗口的 height和 subview 的 width而不是两个 View 的 width .

关于iOS 8 - UIWindow 方向始终为纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26916009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com