首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SwiftUI中检测targetEnvironment是否为iPadOS?

如何在SwiftUI中检测targetEnvironment是否为iPadOS?
EN

Stack Overflow用户
提问于 2019-08-26 13:31:43
回答 3查看 6.2K关注 0票数 12

在为iOS和iPadOS构建时,我想显示不同的视图。目前,我知道我能做到

代码语言:javascript
复制
import SwiftUI

struct ContentView: View {
    #if targetEnvironment(macCatalyst)
    var body: some View {
        Text("Hello")
    }
    #else
    var body: some View {
        Text("Hello")
    }
    #endif
}

显示macOS和iPadOS/iOS之间的不同视图(在Swift 4/5中引入)。但我如何区分后者呢?我似乎不能使用targetEnvironment...

EN

回答 3

Stack Overflow用户

发布于 2019-08-27 14:50:13

我在代码中使用了以下代码:

代码语言:javascript
复制
    private var idiom : UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
    private var isPortrait : Bool { UIDevice.current.orientation.isPortrait }

然后你可以这样做:

代码语言:javascript
复制
    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")
        }
    }
票数 16
EN

Stack Overflow用户

发布于 2020-05-27 06:25:08

要返回不同的视图类型,可以使用AnyView橡皮擦类型:

代码语言:javascript
复制
if UIDevice.current.userInterfaceIdiom == .pad {
    return AnyView(Text("Hello, World!"))
} else {
    return AnyView(Rectangle().background(Color.green))
}
票数 8
EN

Stack Overflow用户

发布于 2021-06-28 22:54:33

我添加了以下代码作为UIDevice的扩展。

代码语言:javascript
复制
extension UIDevice {
    static var isIPad: Bool {
        UIDevice.current.userInterfaceIdiom == .pad
    }
    
    static var isIPhone: Bool {
        UIDevice.current.userInterfaceIdiom == .phone
    }
}

现在,在任何我可以调用UIDevice.isIPadUIDevice.isIPhone的地方,我都可以知道是哪台设备。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57652242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档