我有一个使用SwiftUI编写的仅支持 iPhone 的应用程序,其方向被锁定在纵向,运行正常。然而,当在 iPad 上运行相同的应用程序(在仿真模式下;iPad不是目标设备)时,锁定无效:界面会随着设备旋转,这是不想要的,因为它会破坏界面。这在模拟器和实际设备上都失败了。
我可以使用仅包含单个视图的空 SwiftUI 项目重现此问题。
我可以使用仅包含单个视图的空 SwiftUI 项目重现此问题。
struct ContentView: View {
var body: some View {
Text("Hello, world!")
}
}
iPhone表现正常:
iPad不尊重方向锁定:
我在 Info.plist 中添加了以下内容,但是没有成功。iPad 仍然会旋转 UI。
<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。
UISupportedInterfaceOrientations~ipad
项目,即UIInterfaceOrientationPortrait
。我已经删除了其他3个——但它仍然不起作用。 - DominikUISupportedInterfaceOrientations
键(不带 "~ipad")?只是一个想法。 - West1<key>UISupportedInterfaceOrientations</key><array><string>UIInterfaceOrientationPortrait</string></array>
和<key>UISupportedInterfaceOrientations~ipad</key><array> <string>UIInterfaceOrientationPortrait</string></array>
。 - Dominik