ios 是否有UIKit UIButton.ButtonType.close的SwiftUI版本?

xdnvmnnf  于 2023-01-10  发布在  iOS
关注(0)|答案(4)|浏览(124)

现在我正在从UIKit转换到SwiftUI的过程中,UIKit中有一个原生的Close, X-Styled Button-UIButton.ButtonType.close,,如下所示:

我想在SwiftUI中找到类似的功能,如果已经内置在SwiftUI中的话。如果苹果还没有开始构建/转换这个功能,这是可以理解的。我在苹果Map应用程序中也看到了这一点,我相信它是内置在SwiftUI中的,如下所示(面板右下角):

如果没有一个内置的按钮样式,如何去创建一个视图为这个关闭按钮,这将适应光明和黑暗模式?谢谢你这么多!
编辑:在UIKIt的故事板编辑器中,以下是我要查找的内容:

z0qdvdin

z0qdvdin1#

SwiftUI不使用“按钮类型”的概念,而是可以自己构造,如

Button(action: {}) {
    Image(systemName: "xmark.circle.fill")   // << base !!
        .resizable()
        .frame(width: 32, height: 32) // << for demo
        .foregroundColor(.gray)
}
  • 根据您的需要使用任何其他修饰符

Xcode 13.4 /操作系统15.5

bjg7j2ky

bjg7j2ky2#

可以使用xmark.circle.fill符号作为系统映像:

注️:xmark.circle.fillx.circle.fill之间存在差异

x9ybnkn6

x9ybnkn63#

您可以使用UIViewRepresentable嵌入UIKit UIButton

struct CloseButton: UIViewRepresentable {
    private let action: () -> Void
    
    init(action: @escaping () -> Void) { self.action = action }
    
    func makeUIView(context: Context) -> UIButton {
        UIButton(type: .close, primaryAction: UIAction { _ in action() })
    }
    
    func updateUIView(_ uiView: UIButton, context: Context) {}
}

然后

CloseButton {
    // dismiss()
}

示例:

SomeView()
    .toolbar {
        ToolbarItem(placement: .navigationBarTrailing) {
            CloseButton {
                // dismiss()
            }
            .disabled(isBusy) // SwiftUI modifiers work fine.
        }
    }
bfhwhh0e

bfhwhh0e4#

目前还不能在SwiftUI中使用包括关闭按钮在内的系统按钮类型。我已经提交FB 10380135来请求这个添加。
与此同时,你可以让一个按钮看起来像系统关闭按钮,迈克斯特恩,苹果设计传道者,在问苹果问答中指出:
模态关闭按钮使用15磅粗体的“xmark”SF符号(常规大小的符号,不是大或小的变体)和一个30× 30磅的圆圈。点击区域可能更大,因为我们通常选择的目标大小至少是44× 44磅。
还要注意,关闭按钮不会随着动态字体大小的增加/减小而改变大小。一定要确保将其辅助功能标签设置为“关闭”,并添加对大型内容查看器的支持,以便使用辅助功能文本大小的用户可以点击并按住按钮,以显示一个大的xmark符号,其下方带有“关闭”一词。
我个人建议使用UIViewRepresentable来添加一个真实的的关闭UIButton按钮,而不是试图完全复制它-参见MMP 0提供的答案。

相关问题