我注意到虽然 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 模拟器。我刚刚在实际设备上测试了我的应用,但视图不再透明。