gpt4 book ai didi

ios - iPhone 和 iPad 设备之间的 UIWindow 方向不一致?

转载 作者:行者123 更新时间:2023-11-29 05:40:27 25 4
gpt4 key购买 nike

我正在尝试为覆盖行为创建自定义 UIWindow,并且我到处都看到“UIWindow 不是基于方向的”;女巫正是我想要的,因为我想匹配物理设备的边框。

在 iPhone 上,一切都附加得很好,UIWindow 保持一致,而且我有一个很好且静止的行为;当我旋转设备时,边框不会移动: iPhone preview

在 iPad 上,使用完全相同的代码,我在 UIWindow 层上获得了旋转动画(我用它来绘制边框),这使得这种奇怪的布局发生: iPad preview

我不使用轮换通知;因为我不想回应轮换。我使用 UIScreen nativeBounds“非定向感知”边界来确保我没有对方向敏感的东西。这种跨设备的不同行为让我感到不舒服。

有人已经遇到过这种奇怪的行为吗?你对此有何回应?有没有好的做法或解决方法?

该项目的完整代码(包括示例应用程序)位于此处: https://github.com/Dean151/RecordingOverlay

overlay和UIWindow子类的具体代码在这里: https://github.com/Dean151/RecordingOverlay/blob/master/Sources/RecordingOverlay/RecordingOverlay.swift

最佳答案

事实证明,如果满足某些条件,窗口就会自动旋转。当满足所有这些参数时,我必须覆盖旋转。

如果所有这些都成立,UIWindow 将自动旋转:

  • iOS 至少为 9.0
  • 设备是 iPad
  • 应用支持所有设备旋转
  • 应用程序使用 Storyboard作为其主界面(在 info.plist 中声明)
  • 应用程序不需要全屏(在 info.plist 中声明)

您可以使用一个小片段来检测:

@available(iOS 9.0, *)
var willAutorotate: Bool {
guard UIDevice.current.userInterfaceIdiom == .pad else {
return false
}

let window = UIApplication.shared.delegate?.window ?? nil
guard UIApplication.shared.supportedInterfaceOrientations(for: window) == .all else {
return false
}

let info = Bundle.main.infoDictionary ?? [:]
guard info["UIRequiresFullScreen"] as? Bool != true else {
return false
}

guard info["UILaunchStoryboardName"] != nil else {
return false
}

return true
}

现在我知道它何时会自动旋转,我可以更改框架和变换以“取消”旋转。

关于ios - iPhone 和 iPad 设备之间的 UIWindow 方向不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56609275/

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