这又是一个让我怀疑了自己半天,然后最后发现是Apple本身的bug的事情=, =
这个bug是sheet弹出后,导航栏的按扭会失效而再次弹出sheet又会恢复的问题
重现
首先放了两个按扭(一个切换编辑模式,一个点击就变色)
.toolbar {
ToolbarItem {
EditButton()
}
ToolbarItem {
Button(action: {
isClicked.toggle()
}) {
Text("Click me")
.foregroundColor(isClicked ? .red : .blue)
}
}
}
我先测试了两个按扭,都可以正常工作,然后编辑模式下弹出sheet再关闭后,两个按扭均不能点击了,再次弹出sheet后又都恢复了功能
这个问题我发现会出现在小屏的设备和模拟器,像14 pro max这样的大屏设备的模拟器就没有这种问题
另外如果在按扭不能用的时候时候下拉List一下,又可以正常点击按扭了,反正基本可以确定是Apple一个多年的bug (搜了一下几年前就有人提到这个问题了)
解决方式
解决也蛮简单EditButton().frame(height: 96, alignment: .trailing)
,这样用frame加一个高度就能解决这个问题了
额外的吐槽
sheet
似乎经常出问题啊,上一次还遇到了它第一次出现时不能获得最新值的问题
不过解决也蛮简单,把视图从里面独立出去就能拿到值了
父结构{
某个视图
.sheet(isPresented: $isShowingThemeEditor) {
ThemeEditorView(selectedTheme: $selectedTheme, themes: $themes.themes)
}
}
...
子结构
struct ThemeEditorView: View {
@Binding var selectedTheme: ThemeChooser.Theme?
@Binding var themes: [ThemeChooser.Theme]
var body: some View {
ThemeEditor(theme: $themes[selectedTheme!])
}
}