我想在为 iOS 和 iPadOS 构建时显示不同的视图。目前,我知道我可以做到
import SwiftUI
struct ContentView: View {
#if targetEnvironment(macCatalyst)
var body: some View {
Text("Hello")
}
#else
var body: some View {
Text("Hello")
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
在 macOS 和 iPadOS/iOS 之间显示不同的视图(在 Swift 4/5 中引入)。但我如何区分后者?我似乎无法使用 targetEnvironment ...
Mah*_*san 26
我添加以下代码作为 UIDevice 的扩展。
extension UIDevice {
static var isIPad: Bool {
UIDevice.current.userInterfaceIdiom == .pad
}
static var isIPhone: Bool {
UIDevice.current.userInterfaceIdiom == .phone
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以在任何地方打电话UIDevice.isIPad或UIDevice.isIPhone知道它是什么设备。
car*_*ram 13
我在我的代码中使用它:
private var idiom : UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
private var isPortrait : Bool { UIDevice.current.orientation.isPortrait }
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
var body: some View {
NavigationView {
masterView()
if isPortrait {
portraitDetailView()
} else {
landscapeDetailView()
}
}
}
private func portraitDetailView() -> some View {
if idiom == .pad {
return Text("iPadOS")
} else {
return Text("iOS")
}
}
Run Code Online (Sandbox Code Playgroud)
要返回不同的视图类型,您可以使用AnyView橡皮擦类型:
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(Text("Hello, World!"))
} else {
return AnyView(Rectangle().background(Color.green))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |