新版本废弃了NavigationView,使用NavigationStack和NavigationSplitView
学过SwiftUI的同学应该都会知道,或者从字面意义上也可得知:
NavigationStack是堆叠的意思,整个导航视图只有一栏,用于iOS和watchOS
NavigationSplitView是分屏的意思,整个导航视图有两栏或者三栏(后有图),用于iPadOS和macOS
先看iOS
在之前的SwiftUI3.0版本中,为了消除约束冲突的错误,一般都会在NavigationView后面加个navigationViewStyle,并指定为stack,如下:
NavigationView{}
.navigationViewStyle(.stack)
现在的话直接用:
NavigationStack{}
再看大屏的iPadOS和macOS
用过iPad的同学应该都知道,iPad里面的NavigationView都是两栏或者三栏,这也是宽屏应该有的表现形式:
为了达到上述效果,在之前的SwiftUI3.0版本中,需要这样写:
NavigationView {
SideBarView()
DetailView()
}
.navigationViewStyle(.columns)
现在的话只需要这样写:
NavigationSplitView {
SideBarView()
} detail: {
DetailView()
}
面向全端的App
所以如果开发的App面向iOS,iPadOS以及macOS的话,在写NavigationView的时候就需要判断一下,可以搞个扩展:
extension UIDevice {
static var isIPad: Bool {
UIDevice.current.userInterfaceIdiom == .pad
}
static var isIPhone: Bool {
UIDevice.current.userInterfaceIdiom == .phone
}
}
之后用UIDevice.isIPhone
和UIDevice.isIPad
判断是用stack还是split。