【问题标题】:How to detect whether targetEnvironment is iPadOS in SwiftUI?如何在 SwiftUI 中检测 targetEnvironment 是否为 iPadOS?
【发布时间】:2019-12-30 07:27:22
【问题描述】:

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

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...

【问题讨论】:

    标签: swiftui swift5


    【解决方案1】:

    我在我的代码中使用了这个:

        private var idiom : UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
        private var isPortrait : Bool { UIDevice.current.orientation.isPortrait }
    

    那么你可以这样做:

        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")
            }
        }
    

    【讨论】:

      【解决方案2】:

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

      if UIDevice.current.userInterfaceIdiom == .pad {
          return AnyView(Text("Hello, World!"))
      } else {
          return AnyView(Rectangle().background(Color.green))
      }
      

      【讨论】:

        【解决方案3】:

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

        extension UIDevice {
            static var isIPad: Bool {
                UIDevice.current.userInterfaceIdiom == .pad
            }
            
            static var isIPhone: Bool {
                UIDevice.current.userInterfaceIdiom == .phone
            }
        }
        

        现在我可以在任何地方致电UIDevice.isIPadUIDevice.isIPhone 了解它是哪个设备。

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 2022-11-23
          • 2019-10-19
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2015-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多