如何在 SwiftUI 中增加按钮的大小? (多平台项目)

Posted

技术标签:

【中文标题】如何在 SwiftUI 中增加按钮的大小? (多平台项目)【英文标题】:How to increase the size of a Button in SwiftUI? (Multiplatform project) 【发布时间】:2021-05-18 11:12:14 【问题描述】:

我正在尝试在多平台项目中增加 SwiftUI、Xcode 12.5 中按钮的大小:

Button("Click me") 
            // Perform action here
        
        .frame(width: 100, height: 100)
        .background(Color.yellow)
        .buttonStyle(BorderlessButtonStyle())

检查API 后,我发现我可以设置按钮样式,但我不知道如何使点击框变大。这样整个黄框都接收到点击动作,而不仅仅是标签。

编辑:

点击区域问题在这里解释得很好:https://alejandromp.com/blog/playing-with-swiftui-buttons/

但是那里的解决方案是将元素添加到按钮并更改其大小仅适用于 ios 项目。在多平台项目中,按钮的框架大小错误:

Button(action: , label: 
           Text("Click me")
                    .frame(width: 100, height: 100)
                    .background(Color.yellow)
        )

【问题讨论】:

使用缩放效果,但我仍然不清楚你到底需要什么。 我想要按钮啤酒。令人沮丧的是,在当前版本中这有多难。因为旧版本的所有示例都不起作用。规模效应确实会产生不同的问题。我会将它添加到问题中。我还找到了适用于当前版本的答案。 也许.buttonStyle(PlainButtonStyle()) - 它摆脱了所有默认样式 【参考方案1】:

这是一个可能的解决方案

适用于 iOS

 Button(action: 
                //add actions at here
            ) 
                VStack 
                    Text("Name")
                .frame(width: 100, height: 100)
                .background(Color.yellow)
                .cornerRadius(20)
                
            

适用于 macOS(macOS 版本也适用于 iOS 版本)

struct ContentView: View 
  
    var body: some View 
        VStack
         
            
            Button(action: 
                //add actions at here
            ) 
                VStack 
                    Text("Button Name")
                .frame(width: 100, height: 100)
                .background(Color.yellow)
                .cornerRadius(20)
                
            .buttonStyle(CustomButtonStyle())
        
    


struct CustomButtonStyle: ButtonStyle 
    func makeBody(configuration: Self.Configuration) -> some View 
        configuration.label
            .foregroundColor(Color.blue)
            .cornerRadius(10.0)
            .padding()
    

【讨论】:

你测试过这个吗?与大多数其他解决方案一样,此解决方案的填充是错误的。这将导致我发布的第二张图片。 @kiatra ,在 iOS 中测试没有问题。您是否试图在 macOS 中实现这一目标? @Seugjun ,我已经在一个多平台项目中进行了测试。你说得对,它确实适用于 iOS 平台项目。 @kiatra 嗨,我更新了我的答案以包括 macOS,你能再检查一次吗?【参考方案2】:

我找到了这个解决方案,其中添加 contentShape 似乎可以解决问题:

Button(action: doSomething) 
        Text("Click me")
           .frame(width: 100, height: 100)
           .contentShape(Rectangle())
    
    .background(Color.yellow)
    .buttonStyle(PlainButtonStyle())

【讨论】:

【参考方案3】:

按钮无法识别该位置的修饰符。解决方案是:

        Button(action: , label: 
            Text("Click me")
                .frame(width: 100, height: 100)
                .background(Color.yellow)
        )

【讨论】:

此解决方案仅适用于 iOS。我已经编辑了问题以添加我制作了一个多平台项目。

以上是关于如何在 SwiftUI 中增加按钮的大小? (多平台项目)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中事件触发的动画

SwiftUI 中图像按钮的可点击区域

自定义按钮样式 (SwiftUI) tvOS

在 SwiftUI 中增加标签栏项目图标的大小

即使在 SwiftUI 中调整矩形大小,如何将点转换为 Rectangle 的点?

SwiftUI TextField Representable 不增加字体大小