如何使 SwiftUI TabView 背景透明?

时间:2021-07-25 20:27:25

标签: swift swiftui tabview swiftui-tabview

我注意到虽然 SwiftUI 中的大多数视图都是透明的,但 TabView 似乎为每个视图添加了一个不透明的背景。所以我的问题是我怎样才能删除所说的不透明背景以使视图透明?

我尝试使用 this StackOverflow 答案中的这个辅助扩展,只是它似乎使我的第一个选项卡透明而不是其他选项卡,并且编译器抛出了很多警告和偶尔的错误,所以我不确定如果这是删除背景的安全方法。

我还在 Hacking with Swift 上遇到了 another discussion,这表明某些 TabView 样式,即 PageTabViewStyle 实际上允许透明背景。所以我决定尝试制作一个自定义的 TabViewStyle,只是我完全被这个难住了:

// Custom TabViewStyle to make view transparent
struct TransparentTabViewStyle: TabViewStyle {
    static func _makeView<SelectionValue>(value: _GraphValue<_TabViewValue<TransparentTabViewStyle, SelectionValue>>, inputs: _ViewInputs) -> _ViewOutputs where SelectionValue : Hashable {
        // code
    }

    static func _makeViewList<SelectionValue>(value: _GraphValue<_TabViewValue<TransparentTabViewStyle, SelectionValue>>, inputs: _ViewListInputs) -> _ViewListOutputs where SelectionValue : Hashable {
        // code
    }
}

我不确定 _GraphValue_TabViewValue 和其他数据类型是什么,但我认为它们是用于构建视图的某种隐藏值?

我还考虑向 DefaultTabViewStyle 添加扩展以修改那里的背景(如果可能的话),只是我不知道从哪里访问 TabView 的背景,因为唯一的可用的东西似乎是 self

我最后的选择可能是从头开始制作自定义标签栏,但我不想这样做。那么使我的 TabView 的背景透明的最佳解决方案是什么?如果它正在定制一个 TabViewStyle,那么至少有人能指出我实现 _makeView_makeViewList 函数的正确方向吗?

任何帮助将不胜感激!

编辑:由于某种原因,我之前尝试过它时它没有用,但这个答案似乎有效:https://stackoverflow.com/a/63179684/12299030

编辑:实际上,这个解决方案 (https://stackoverflow.com/a/63179684/12299030) 似乎只适用于 Xcode 模拟器。我刚刚在实际设备上测试了我的应用,但视图不再透明。

0 个答案:

没有答案