iOS 15TabView根据加载视图的滚动位置设置 的外观。但是,这似乎不会在选项卡栏中切换的视图之间更新。我该如何解决这个问题以便外观正确更新?
打开不滚动内容的选项卡式视图(“无滚动视图”)使用选项卡栏的透明背景。
导航到具有滚动内容的选项卡式视图(“滚动视图”)后,将使用半透明背景。
然而,当回到“无滚动视图”时,半透明背景仍然保留,而不是被透明背景替换。
我确实注意到,当我打开控制中心或应用程序切换器并返回时,外观会正确更新。
再生产:
enum Tab {
case scroll
case noScroll
}
struct ContentView: View {
@State var selection: Tab = .noScroll
var body: some View {
TabView(selection: $selection) {
Text("Should have a transparent tab bar")
.tabItem{ Label("No-scroll", systemImage: "xmark.circle") }
.tag(Tab.noScroll)
ScrollView {
VStack(spacing: 10) {
ForEach(0..<100) {_ in
Text("Should have a translucent tab bar")
}
}
}
.tabItem { Label("Scroll", systemImage: "circle") }
.tag(Tab.scroll)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想看看是否可以根据选择的选项卡项更改底部 tabview 的颜色。目前,我可以使用 init.d 中的以下代码清除 tabview 栏。
let tabBar = UITabBar.appearance()
init() {
tabBar.barTintColor = UIColor.clear
tabBar.backgroundImage = UIImage()
tabBar.shadowImage = UIImage()
}
...
TabView(selection: $selectedTab) {
FirstView()
.tabItem{
Text("First")
}
SecondView()
.tabItem{
Text("Second")
}
}
.onAppear{
setTabViewBackground()
}
func setTabViewBackground() {
if selectedTab != 0 {
tabBar.barTintColor = UIColor.blue
}
}
Run Code Online (Sandbox Code Playgroud)
试图在身体重绘和 idk 时触发 func,如果它的这种声明式风格得到了我的最好,但根本不改变 tabview 背景。