我最初是为 iPad 设计的应用程序,现在也想为 iPhone 添加功能。有没有办法检查正在使用的设备是什么,然后相应地显示视图?
结构化英语:
IF current_device == iPhone THEN
DISPLAY iPhoneView
ELSE IF current_device == iPad THEN
DISPLAY iPadView
如果可能的话,我还希望 iPad 视图仅水平可用,然后 iPhone 视图仅在可能的情况下垂直可用。
您正在寻找的是尺码类别。
要在 SwiftUI 视图中读取当前水平尺寸类别,您可以参考
horizontalSizeClass
的环境值
@Environment(\.horizontalSizeClass) var horizontalSizeClass
然后在你的 SwiftUI 中像这样使用它
View
:
var body: some View {
if horizontalSizeClass == .compact {
return CompactView() // view laid out for smaller screens, like an iPhone
} else {
return RegularView() // view laid out for wide screens, like an iPad
}
}
值得注意的是,并非所有 iPhone 都是
compact
水平放置的,在多任务配置下,iPad 上也存在 compact
尺寸类别。您将在此处在设备尺寸类别和多任务尺寸类别部分找到所有可能的组合。
一些可能有帮助的文章
或者,您可以使用如下变量根据设备高度(或宽度)设置单独的阈值:
@State var isLargeDevice: Bool = {
if UIScreen.main.bounds.height > 800 {
return true
} else {
return false
}
}()
我喜欢@Malburrito 的答案,但需要合并Mac。
#if os(iOS)
import UIKit
#endif
var isLargeDevice: Bool {
#if os(macOS)
return true
#else
if UIScreen.main.bounds.width > 1200 {
return true
} else {
return false
}
#endif
}
并像这样使用它:
struct MainView: View {
var body: some View {
if isLargeDevice {
RegularMainView() // uses NavigationSplitView
} else {
CompactMainView() // uses NavigationStack
}
}
}
我可能需要添加更多内容来区分纵向或横向模式,但当我到达那里时会跨过那座桥。