界面设计:自定义返回按钮
来到HomePageView视图,和ContentView和NewView一样,我们给这个页面创建顶部导航菜单,而导航栏的标题,我们可以声明一个变量,将ContentView的平台名称变量传值过来,如下代码所示:
struct HomePageView: View { var platformName: String var body: some View { NavigationStack { Text("HomePageView") .navigationBarTitle(platformName, displayMode: .inline) } } }
声明变量后,我们还要回到ContentView给使用到HomePageView中声明的变量绑定默认值,实现从ContentView视图传值到HomePageView视图中,如下代码所示:
HomePageView(platformName:item.platformName)
在HomePageView视图中,我们看到由于使用NavigationLink跳转返回,因此在跳转后的页面会自带返回按钮。
但这个返回按钮没那么好看,我们可以隐藏原来系统自带的返回按钮,然后自己自定义一个返回按钮并实现返回操作,如下代码所示:
struct HomePageView: View { var platformName: String @Environment(.presentationMode) var presentationMode var body: some View { NavigationStack { Text("HomePageView") .navigationBarTitle(platformName, displayMode: .inline) .navigationBarBackButtonHidden(true) .navigationBarItems(leading: backBtn()) } } // 返回按钮 func backBtn() -> some View { Button(action: { self.presentationMode.wrappedValue.dismiss() }) { Image(systemName: "chevron.backward") .font(.system(size: 17)) .foregroundColor(.black) } } }
上述代码中,我们创建了一个返回按钮视图backBtn,并使用环境变量presentationMode实现其出栈返回上一页方法。
导航菜单部分,使用navigationBarBackButtonHidden隐藏导航菜单返回按钮修饰符隐藏NavigationLink自带的返回按钮,并使用navigationBarItems导航菜单按钮元素修饰符将backBtn返回按钮视图加到导航菜单上。