如何在 iPad 上为 iPhone SwiftUI 应用 运行 锁定纵向方向?
How to lock orientation in portrait for an iPhone SwiftUI app running on iPad?
我有一个仅 SwiftUI iPhone 的应用程序,其方向锁定为纵向,效果很好。但是,当同一应用程序在 iPad 上 运行(在仿真模式下;iPad 不是目标)时,锁定无效:UI 随设备旋转,这是意外的,因为它打破了 UI。它在模拟器和实际设备上都失败了。
我可以使用只有一个视图的空 SwiftUI 项目重现此问题:
struct ContentView: View {
var body: some View {
Text("Hello, world!")
}
}
iPhone 按预期工作:
iPad 不遵守方向锁定:
我的 Info.plist 中有以下内容,但没有成功。 UI 仍然在 iPad 上旋转。
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
然后我定义了一个AppDelegate。仍然没有成功,UI 一直在 iPad.
上旋转
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
}
@main
struct orientationApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
有趣的是:
- 当我启用 iPad 作为目标时,方向锁定开箱即用。但是,我不想为 iPad 提供该应用程序。我只想为故意在 iPad.
上安装 iPhone 应用程序的用户修复 UI
- 当我在 iPhone 上测试 AppDelegate 方法时,即使我允许 Info.plist 中的所有设备方向,它也能正常工作,所以它似乎做了正确的事情(只是不在 iPad).
我正在使用 Xcode 12.5 和 Swift 5。
取消勾选 Supports multiple windows
解决了我的问题
我有一个仅 SwiftUI iPhone 的应用程序,其方向锁定为纵向,效果很好。但是,当同一应用程序在 iPad 上 运行(在仿真模式下;iPad 不是目标)时,锁定无效:UI 随设备旋转,这是意外的,因为它打破了 UI。它在模拟器和实际设备上都失败了。
我可以使用只有一个视图的空 SwiftUI 项目重现此问题:
struct ContentView: View {
var body: some View {
Text("Hello, world!")
}
}
iPhone 按预期工作:
iPad 不遵守方向锁定:
我的 Info.plist 中有以下内容,但没有成功。 UI 仍然在 iPad 上旋转。
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
然后我定义了一个AppDelegate。仍然没有成功,UI 一直在 iPad.
上旋转class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
}
@main
struct orientationApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
有趣的是:
- 当我启用 iPad 作为目标时,方向锁定开箱即用。但是,我不想为 iPad 提供该应用程序。我只想为故意在 iPad. 上安装 iPhone 应用程序的用户修复 UI
- 当我在 iPhone 上测试 AppDelegate 方法时,即使我允许 Info.plist 中的所有设备方向,它也能正常工作,所以它似乎做了正确的事情(只是不在 iPad).
我正在使用 Xcode 12.5 和 Swift 5。
取消勾选 Supports multiple windows
解决了我的问题