【Lebus的iOS开发教程】iOS16+SwiftUI4.0新功能实操演示-NavigationView

891 阅读1分钟

新版本废弃了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都是两栏或者三栏,这也是宽屏应该有的表现形式:

WechatIMG244.jpeg

为了达到上述效果,在之前的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.isIPhoneUIDevice.isIPad判断是用stack还是split。