根据设备改变视图 - SwiftUI

4

我最初为iPad设计了我的应用程序,现在想为iPhone添加功能。有没有一种方法可以检查正在使用的设备,然后相应地显示视图?

IF current_device == iPhone THEN
    DISPLAY iPhoneView
ELSE IF current_device == iPad THEN
    DISPLAY iPadView

如果可能的话,我希望iPad视图仅在水平方向上可用,而iPhone视图仅在垂直方向上可用。

我建议根据框架宽度来做这件事(通常在切换到更大的视图之前,我使用500作为限制)。请记住,iPad上的应用程序可以调整大小,并且可以像iPhone屏幕一样窄。 - EmilioPelaez
这很不错,但是我想重新排列整个视图,并在不同的位置放置不同的项目,这样会更好。 - benpomeroy9
你好!你解决了你的问题吗? - Witek Bobrowski
2个回答

7
您需要的是大小类(Size Classes)
在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在水平方向上都具有“紧凑”尺寸,而在多任务配置下iPad上也存在“紧凑”尺寸类。您可以在这里设备大小类别多任务大小类别部分找到所有可能的组合。
以下是一些有用的文章:

多么有用的答案。非常感谢! - undefined

0

或者,您可以使用像这样的变量根据设备的高度(或宽度)设置单独的阈值:

@State var isLargeDevice: Bool = {
    if UIScreen.main.bounds.height > 800 {
        return true
    } else {
        return false
    }
}()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接