当您从导航栏项目内的按钮显示模式时,这是 SwiftUI 中的一个错误。在下面的代码中,按钮 1 按预期工作,但按钮 2 仅工作一次:
struct DetailView: View {
@Binding var isPresented: Bool
@Environment (\.presentationMode) var presentationMode
var body: some View {
NavigationView {
Text("OK")
.navigationBarTitle("Details")
.navigationBarItems(trailing: Button(action: {
self.isPresented = false
// or:
// self.presentationMode.wrappedValue.dismiss()
}) {
Text("Done").bold()
})
}
}
}
struct ContentView: View {
@State var showSheetView = false
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()
}) { …
Run Code Online (Sandbox Code Playgroud) 在 SwiftUI 中,请考虑以下导航栏:
以下是尾随.navigationBarItems
的声明方式:
HStack(spacing: 0) {
Button(action: {
self.addListModal = true
}, label: {
NavBarImage(image: "plus")
})
// more buttons here
Run Code Online (Sandbox Code Playgroud)
这是NavBarImage
结构:
struct NavBarImage: View {
var image: String
var body: some View {
ZStack {
Rectangle().foregroundColor(Color.red).frame(width: 40, height: 45)
Image(systemName: image)
}
}
}
Run Code Online (Sandbox Code Playgroud)
红色在那里,所以我可以看到每个按钮的可点击区域应该是什么。这ZStack
有一个Rectangle
想法介绍给我的一种方式,使图像更容易点击。
现在,我想将项目向右移动,以便它们更符合下面的列表内容。我尝试添加一个.offset
到我的HStack
:
HStack(spacing: 0) {
// buttons
}
.offset(x: 15, y: 0)
Run Code Online (Sandbox Code Playgroud)
产生这个结果:
所以这对我来说看起来很完美。然而,问题是最右侧的导航按钮的可点击区域在右侧被切断。
我已经用绿色说明了可点击区域的切断,这里:
所述按钮的绿色区域不再记录任何点击。
我已经使用负尾随试图.padding
在HStack
相反,它并没有区别。有没有办法纠正这个问题,也许是通过UINavigationBar …