问题是,在工作表关闭后,导航栏按钮的布局不好(似乎受到了破坏)
它在视图层次结构调试中清晰可见:
这里有一个解决方案(当然是解决方案,但很安全,因为即使问题得到解决,它也会继续工作)。这样做的目的不是为了对抗坏的布局,而是创建另一个按钮,因此布局引擎本身会删除旧的坏按钮,并添加一个新的刷新布局。这方面的仪器非常有名——使用
.id()
所以修改代码:
struct ContentView: View {
@State var showSheetView = false
@State private var navigationButtonID = UUID()
var body: some View {
NavigationView {
Group {
Text("Master")
Button(action: { self.showSheetView.toggle() }) {
Text("Button 1")
}
}
.navigationBarTitle("Main")
.navigationBarItems(trailing: Button(action: {
self.showSheetView.toggle()
}) {
Text("Button 2").bold() // recommend .padding(.vertical) here
}
.id(self.navigationButtonID)) // force new instance creation
}
.sheet(isPresented: $showSheetView) {
DetailView(isPresented: self.$showSheetView)
.onDisappear {
// update button id after sheet got closed
self.navigationButtonID = UUID()
}
}
}
}
backup