【发布时间】:2021-02-25 08:24:26
【问题描述】:
我刚刚更新到 Big Sur,现在我的 Catalyst 应用程序遇到了严重的问题。我用类似的代码创建了一个新项目来测试它。行为有点不同,但在这两种情况下,都有一点,点击停止工作,或者至少不再可靠。
以这个示例代码为例:
struct ContentView: View {
private var tabs = ["tab1", "tab2", "tab3"]
@State private var selectedTab = 0
var body: some View {
VStack {
self.fakeTabs()
self.tabView()
}
}
private func fakeTabs() -> some View {
HStack(spacing: 0) {
// ========================================================
// Tabs
// ========================================================
ForEach(self.tabs, id: \.self) { tab in
ZStack {
// background
Rectangle()
.fill(self.isSelected(tab: tab) ? Color.blue : Color.green)
.border(Color.black, width: 1)
.contentShape(Rectangle())
// icon
HStack(spacing: 15.0) {
Image(systemName: "folder")
.foregroundColor(.white)
.frame(width: 20, height: 20)
Text(tab)
.font(.caption)
}
}
.onTapGesture {
self.selectedTab = self.tabs.firstIndex(where: { $0 == tab }) ?? 0
}
}
}
.frame(height: 30)
}
private func tabView() -> some View {
TabView(selection: self.$selectedTab) {
ForEach(self.tabs.indices) { index in
let tab = self.tabs[index]
Text("Tab selected: \(tab)")
.tabItem { Text(tab) }
.tag(index)
}
}
}
private func isSelected(tab: String) -> Bool {
if let index = self.tabs.firstIndex(where: { $0 == tab }) {
if index == self.selectedTab {
return true
}
}
return false
}
}
如果您开始单击底部的标签栏,它会起作用。如果您然后继续单击顶部的选项卡,它也可以工作。但是点击顶部的假标签后,就不能再点击底部的TabBar了。
其他人是否遇到过这个问题?是 Big Sur 的错误吗?
编辑
它在 iPadOS 上的模拟器中完美运行。
【问题讨论】:
-
我正在经历同样的事情。 FWIW,它似乎适用于
Buttons,但不适用于onTapGesture。你找到解决办法了吗?
标签: swiftui mac-catalyst