iPad 上的 StackNavigationViewStyle 时工具栏消失 |斯威夫特 iOS 15
Toolbar disappears when StackNavigationViewStyle on iPad | SwiftUI iOS 15
我有这个 TabView:
ZStack(alignment: Alignment(horizontal: .center, vertical: .bottom)){
TabView(selection: $mainViewProperties.currentView) {
...
//HOME
NavigationView{
HomeView(
)
.navigationBarTitleDisplayMode(.inline)
}
.tag(MainViewProperties.Views.HOME)
...
}
//My Custom NavBar
CustomBottomNav(selectedTab: $mainViewProperties.currentView)
.padding()
}
HomeView 的 正文是这样的:
List{
ForEach((0...30), id: \.self){ i in
HStack{
Spacer()
Text("New \(i)")
Spacer()
}
.padding()
.background(Color.backgroundOver)
.cornerRadius(.lotoUpCornerRadius)
.lotoUpShadow() // <- CUSTOM EXTENSION
//Bottom padding
if i == 30 {
VStack{
}
.frame(height: .paddingForBottomNav) // <- CUSTOM EXTENSION
}
}
.listRowSeparator(.hidden)
.listRowBackground(Color.background)
}
.listStyle(PlainListStyle())
.background(
Color.background
)
.toolbar {
ToolbarItem(placement: .principal){
Text(String.R.home_title)
.font(getLotoUpFont(size: 20))
.bold()
.foregroundWithPrimaryGradient() // <- CUSTOM EXTENSION
}
}
看起来像这样:
我不想要 iPad 上的侧边栏导航,所以我将 StackNavigationViewStyle 添加到 NavigationView 之类的这个:
//HOME
NavigationView{
HomeView(
)
.navigationBarTitleDisplayMode(.inline)
}
.navigationViewStyle(.stack) //<- HERE
.tag(MainViewProperties.Views.HOME)
但是工具栏的背景不再显示:
如何让 Stack Navigation 和 Toolbar 的背景融为一体?
PD:我也在 HomeView:
上试过了
.toolbar {
ToolbarItem(placement: .principal){
HStack{
Spacer()
Text(String.R.home_title)
.font(getLotoUpFont(size: 20))
.bold()
.foregroundWithPrimaryGradient()
Spacer()
}
.background(
Color.red
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
)
}
}
但它允许我不想要的空间:
编辑:
我在真实设备(iPhone 8 Plus)上对此进行了测试并且工作正常,NavigationBar 在那里,但在模拟的 iPhone 8 加上 NavigationBar 背景是半透明的。
所以现在我在模拟器上怀疑。不过我没有 iPad 来测试这个。
这似乎是 iOS 15 模拟器上的一个错误。在 iOS 15.2 上它工作得很好。
我有这个 TabView:
ZStack(alignment: Alignment(horizontal: .center, vertical: .bottom)){
TabView(selection: $mainViewProperties.currentView) {
...
//HOME
NavigationView{
HomeView(
)
.navigationBarTitleDisplayMode(.inline)
}
.tag(MainViewProperties.Views.HOME)
...
}
//My Custom NavBar
CustomBottomNav(selectedTab: $mainViewProperties.currentView)
.padding()
}
HomeView 的 正文是这样的:
List{
ForEach((0...30), id: \.self){ i in
HStack{
Spacer()
Text("New \(i)")
Spacer()
}
.padding()
.background(Color.backgroundOver)
.cornerRadius(.lotoUpCornerRadius)
.lotoUpShadow() // <- CUSTOM EXTENSION
//Bottom padding
if i == 30 {
VStack{
}
.frame(height: .paddingForBottomNav) // <- CUSTOM EXTENSION
}
}
.listRowSeparator(.hidden)
.listRowBackground(Color.background)
}
.listStyle(PlainListStyle())
.background(
Color.background
)
.toolbar {
ToolbarItem(placement: .principal){
Text(String.R.home_title)
.font(getLotoUpFont(size: 20))
.bold()
.foregroundWithPrimaryGradient() // <- CUSTOM EXTENSION
}
}
看起来像这样:
我不想要 iPad 上的侧边栏导航,所以我将 StackNavigationViewStyle 添加到 NavigationView 之类的这个:
//HOME
NavigationView{
HomeView(
)
.navigationBarTitleDisplayMode(.inline)
}
.navigationViewStyle(.stack) //<- HERE
.tag(MainViewProperties.Views.HOME)
但是工具栏的背景不再显示:
如何让 Stack Navigation 和 Toolbar 的背景融为一体?
PD:我也在 HomeView:
上试过了 .toolbar {
ToolbarItem(placement: .principal){
HStack{
Spacer()
Text(String.R.home_title)
.font(getLotoUpFont(size: 20))
.bold()
.foregroundWithPrimaryGradient()
Spacer()
}
.background(
Color.red
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
)
}
}
但它允许我不想要的空间:
编辑: 我在真实设备(iPhone 8 Plus)上对此进行了测试并且工作正常,NavigationBar 在那里,但在模拟的 iPhone 8 加上 NavigationBar 背景是半透明的。 所以现在我在模拟器上怀疑。不过我没有 iPad 来测试这个。
这似乎是 iOS 15 模拟器上的一个错误。在 iOS 15.2 上它工作得很好。