当按钮靠在一起时,SwiftUI NavigationLink 行为不正确

Posted

技术标签:

【中文标题】当按钮靠在一起时,SwiftUI NavigationLink 行为不正确【英文标题】:SwiftUI NavigationLink not behaving correctly when buttons are close together 【发布时间】:2020-07-31 15:59:50 【问题描述】:

我正在尝试实现一个可编程的 NavigationLink 以转到另一个视图,由一个简单的按钮触发。但是当那个按钮在另一个按钮旁边时,它不会触发 NavigationLink,而是触发它旁边的按钮的操作。

struct NavLinkView: View 
    @State var showPasswordStr = true
    @State var showCheckView = false
    @State var password = "Abc"
    var body: some View 
        Form 
            VStack 
                NavigationLink(destination: CheckView(), isActive: $showCheckView ) 
                    EmptyView()
                
                Text("Password")
                    .font(.system(size: 12, weight: .light, design: .default))
                    .foregroundColor(.gray)
                HStack 
                    
                    if showPasswordStr 
                        TextField("", text: $password)
                            .textFieldStyle(RoundedBorderTextFieldStyle())
                     else 
                        SecureField("", text: $password)
                            .textFieldStyle(RoundedBorderTextFieldStyle())
                    
                    Button(action: 
                        showPasswordStr.toggle()
                     ) 
                        Image(systemName: showPasswordStr ? "eye.slash" : "eye" )
                    
                    .padding(.leading)

                    Button(action:  showCheckView.toggle()  ) 
                        Image(systemName: "checkmark.circle" )
                    
                    .padding(.leading)
                
            
        
    

我错过了什么?如果我将 NavigationLink 移动到 VStack 之后,那么两个按钮都会触发第一个按钮和 NavigationLink 的操作。

【问题讨论】:

【参考方案1】:

由于您的按钮位于 Form 中,您需要将其样式更改为 PlainButtonStyle

Button(action: 
    self.showPasswordStr.toggle()
) 
    Image(systemName: showPasswordStr ? "eye.slash" : "eye")

.buttonStyle(PlainButtonStyle()) // <- add style

Button(action:  self.showCheckView.toggle() ) 
    Image(systemName: "checkmark.circle")

.buttonStyle(PlainButtonStyle()) // <- add style

【讨论】:

以上是关于当按钮靠在一起时,SwiftUI NavigationLink 行为不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何修复自定义按钮在 SwiftUI(IOS) 中的交互?

当我们在文本和图像之间切换按钮内容时,如何停止 SwiftUI 更改固定填充?

SwiftUI - TabBar 按钮更改

使用 SwiftUI,我们在 List 中安装了一个 Button。为啥当我点击按钮显示模态然后再次关闭时模态消失?

清除按钮按下swiftui时如何自动上一个文本字段

SwiftUI - 如何在点击时更改按钮的图像?