ios macOS 上 带有 clippedShape " 胶囊 " 的 SwiftUI 按钮 出现 故障

iaqfqrcu  于 2022-11-19  发布在  iOS
关注(0)|答案(1)|浏览(118)

问题

我正在尝试使用以下代码创建两个药丸状的圆形按钮。在iPadOS和iOS上,一切正常。但是,如果我把预览设备放在MacBook上,事情就开始像图片上描述的那样出现故障。

这是相应的代码:

struct ButtonBar: View {
    var body: some View {
        HStack(alignment: .center) {
            Spacer()
            Button {
                // action not yet implemented
            } label: {
                Text("Cancel")
                    .font(FontFamily.CustomFont.regular.swiftUIFont(fixedSize: 16))
                    .foregroundColor(Color.white)
                    .padding(EdgeInsets(top: 12, leading: 39, bottom: 12, trailing: 39))
                    .background(Color(Theme.CustomGrayColor))
                    .clipShape(Capsule(style: .circular))
            }
            Button {
                // action not yet implemented
            } label: {
                Text("Share")
                    .font(FontFamily.CustomFont.regular.swiftUIFont(fixedSize: 16))
                    .foregroundColor(Color(Theme.CustomGrayColor))
                    .padding(EdgeInsets(top: 12, leading: 39, bottom: 12, trailing: 39))
                    .background(Color(Theme.CustomOrangeColor))
                    .clipShape(Capsule(style: .circular))
            }

        }
        .padding(EdgeInsets(top: 24, leading: 0, bottom: 24, trailing: 24))
        .background(
            Color(Theme.CustomGrayColor2)
                .shadow(color: Color.black.opacity(0.25), radius: 12, x: 0, y: 0)
        )
    }
}

struct ButtonBar_Previews: PreviewProvider {
    static var previews: some View {
        ButtonBar()
    }
}

这就是奇怪的地方在iOS上,使用上面的代码,一切都运行得很好,按钮看起来像这样:

问题

我希望SwiftUI能在两个平台上自动正确显示内容(这难道不是SwiftUI与UIKit/AppKit相比的最大优势吗?)

如何解决这个问题,使macOS上的按钮看起来像iOS上的按钮,而不为不同的平台创建单独的视图?

bqucvtff

bqucvtff1#

进场

  • 使用.buttonStyle(.plain)

最好遵循Apple的HIG(设计指南)

  • 您尝试使用的按钮在macOS上不常见。
  • 恕我直言,我觉得(我可能错了)它没有遵守macOS的设计准则。
    ***建议:**减小macOS的转弯半径

按钮的简化版本

  • 我仍然更喜欢使用Mac的默认按钮。
  • 这在Mac上看起来会很奇怪,但既然你问了,它就在下面
struct ContentView: View {
    var body: some View {
        Button {
            print("pressed")
        } label: {
            Text("some button")
                .padding(12)
                .background(in: RoundedRectangle(cornerRadius: 10))
                .backgroundStyle(.brown)
        }
        .buttonStyle(.plain)
    }
}

相关问题