【问题标题】:SwiftUI - Overlay TabView with Custom ViewSwiftUI - 使用自定义视图覆盖 TabView
【发布时间】:2021-03-08 06:23:29
【问题描述】:

我有一个带有标签栏导航概念的应用。对于一个视图,我目前正在尝试实现一个标签栏覆盖,大家都知道 iOS 中的照片应用程序。它在您选择图像时出现。见下文:

我尝试在下面的代码 sn-p 中实现这种行为,但我有两个疑问:

  • .overlay() 是正确的做法吗?我想将它与 State 结合起来并相应地设置它以启用/禁用覆盖。
  • 如果从编码的角度来看覆盖是可以的,我将如何将其与底部对齐并注意调整大小以使其完全覆盖标签栏?
struct ContentView: View {
    var body: some View {
        TabView {
            
            NavigationView {
                Text("First Nav Page")
            }
            .tabItem {
                Image(systemName: "house")
                Text("Home")
                
            }.tag(0)
            
            NavigationView {
                Text("Second Nav Page")
            }
            .tabItem {
                Image(systemName: "gear")
                Text("Settings")
            }.tag(1)
            
            Text("No Nav Page")
                .tabItem{
                    Image(systemName: "plus")
                    Text("Test")
                }.tag(2)
            
        }.overlay(
            Rectangle()
                .foregroundColor(.red)
                .frame(width: 40, height: 40)
        )
    }
}

谢谢!

【问题讨论】:

    标签: swiftui overlay tabbar tabview


    【解决方案1】:

    您正在寻找的是Toolbar,而不是 TabBar。所以当用户在 EditMode 中发生变化时,你将不得不将 TabBar 更改为 Toolbar。

    工具栏在 iOS 14 中可用,它采用 ToolbarItem 作为中心的 Status 以及带有图标的前导 Item。您应该构建一个函数,将 TabBar 与 Toolbar 交换。

    以下是适用于您的案例的工具栏示例:

    struct ContentView: View {
        @State var isSelecting : Bool = false
        
        var body: some View {
            NavigationView {
                Text("Hello World")
                    .toolbar {
                        ToolbarItem(placement: .bottomBar, content: {
                                Button(action: {
                                    
                                }){
                                    Image(systemName: "square.and.arrow.up")
                                }
                            })
                    }
                    .toolbar {
                        ToolbarItem(placement: .status, content: {
                                Text("Auswählen")
                                    .fontWeight(.bold)
                        })
                }
            }
        }
    }
    

    【讨论】:

    • 很高兴它有帮助。又学到了很多东西,直到今天才知道SwiftUI中的Toolbar
    • 稍微调整了一下,但它真的很hacky。我还需要为条件修饰符编写一个扩展(如果 element = true enable .overlay())。标签栏的样式也具有挑战性。不要认为 Apple 是这样做的 :D 你知道如何配置 ZStack 来覆盖 tabView @davidev 吗?我会有更多的样式和条件选项。