SwiftUI的设计就是开箱即用,这就意味着我们可以根据需要,将任意View放置到另一个View中。这一点对于我们常常使用的一些Container View是非常有用的,比如导航栏和底部tab栏。我们可以把任何一个View扔进Container中,SwiftUI会自动适应View的布局。本篇主要介绍这几种Container View:
NavigationView, TabbedView, Group。
NavigationView
在前面的文章中其实已经见过几次NavigationView了,它对应UIKit中的UINavigationController。如果想拥有导航到别的控制器的能力,页面必须包裹进NavigationView中:
NavigationView{
Text("Hello world")
}
1.设置导航栏title
上面创建的导航栏顶部是空的,我们可以为其添加一个title:
NavigationView{
Text("Hello World!").navigationBarTitle("TEST")
}
系统默认给我们添加的是更摩登的title类型–居左的大标题,并且当页面向上滚动时标题会自动运动到导航栏正中位置,体验挺好,大家可以试试:
但如果这不是你要的亚子,我们也可以设置成熟悉的导航栏样式:
NavigationView{
Text("Hello World!").navigationBarTitle("TEST",displayMode: .inline)
}
displayMode是TitleDisplayMode枚举的值,它有三种值:
- automatic:从前一个导航栏继承显示模式
- inline:展示标准导航条的title样式
- large:即系统默认的样式,居左大标题
针对设置导航栏的title,我做了一个小实验:
NavigationView{
List(streets){
street in
NavigationLink(destination:ListViewDetial()){
HStack(alignment:.center){
// TaskRow是自定义View
TaskRow().navigationBarTitle("Streets4", displayMode: .large)
TaskRow()
}.navigationBarTitle("Streets3", displayMode: .large)
}.navigat