swift NavigationBar项到屏幕边缘

xdnvmnnf  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(109)

问题

增加一个自定义的导航按钮限制了按钮的可触摸区域,通过使其更难按下来减少用户体验。我希望有一些空间,以我的V形左边,但它不会延伸到领先的利润率。我也不想添加填充,所以V形是更多的权利。
更详细地说,我所尝试的...

内置返回按钮

  • 移到屏幕边缘
  • 有文本(不需要)

通过工具栏项自定义返回按钮

我已将背景设置为灰色以突出显示触摸区域

  • 不会移到屏幕边缘
  • 减少触摸面积,所以有时按下按钮时会错过最左边
.toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                AppBackButton(action: {
                    self.dismiss()
                })
                .background(.gray)
            }
        }

通过工具栏项自定义后退按钮,带负填充

  • 看起来像是到了边缘
  • 仍然无法拾取领先安全区之外的触摸事件
.toolbar {
            ToolbarItem(placement: .navigationBarLeading) {
                AppBackButton(action: {
                    self.dismiss()
                })
                .background(.gray)
                .padding(.leading, -16)
            }
        }

我不只是想删除文本。理想情况下,我希望所有按钮的图像都达到边框,但可触摸区域延伸到边距,就像默认的后退按钮一样。我怎么能做到这一点?

dluptydi

dluptydi1#

我可以复制你的问题。
有点令人惊讶的是,不可能创建一个ToolbarItem,其敏感区域与原生后退按钮相同。
作为解决方法,您可以使用覆盖:

struct Subview: View {

    @Environment(\.dismiss) private var dismiss

    var body: some View {
        VStack {
            Text("Subview")
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .navigationBarBackButtonHidden()
        .overlay(alignment: .topLeading) {
            AppBackButton(action: {
                self.dismiss()
            })
            .background { Color.gray }
        }
//        .toolbar {
//            ToolbarItem(placement: .navigationBarLeading) {
//                AppBackButton(action: {
//                    self.dismiss()
//                })
//                .background(.gray)
//            }
//        }
    }
}

相关问题