SwiftUI 中的按钮大小和颜色

Posted

技术标签:

【中文标题】SwiftUI 中的按钮大小和颜色【英文标题】:Button size and color in SwiftUI 【发布时间】:2021-03-04 23:29:07 【问题描述】:

我是 SwiftUI 和 ios 开发的新手。

我尝试创建 2 个按钮,但无法更改背景颜色或大小。

看起来像这样:

下面是代码:

        HStack 
            Button( action: 
                print("click")
            )
                Text("Login")
                    .foregroundColor(.purple)
                    .padding()
                    .overlay(
                        RoundedRectangle(cornerRadius: 20)
                            .stroke(Color.purple, lineWidth: 1)
                    )
            
            Button( action: 
                print("click")
            )
                Text("Register")
                    .foregroundColor(.white)
                    .padding()
                    .overlay(
                        RoundedRectangle(cornerRadius: 20)
                            .stroke(Color.black, lineWidth: 1)
                            
                    )
                
            
        

我希望得到一个按钮,它几乎使用了屏幕的一半,每边的边距为 10 像素。目标是让 2 个按钮几乎覆盖显示屏的宽度。我也试着让它更薄。上下边框的距离过大,左右边框要宽一些的时候,我希望它靠近文字。

我也不知道如何将按钮背景颜色更改为黑色

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

您可以创建自己的ButtonStyle,您可以完全自定义和重复使用

struct CustomButtonStyle: ButtonStyle 
    func makeBody(configuration: Configuration) -> some View 
        configuration.label
            .padding(10) // *make it thinner*
            .frame(maxWidth: .infinity) // expand horizontally 
            .foregroundColor(.purple)
            .background(
                Rectangle()
                    .stroke(Color.purple, lineWidth: 1)
                    .background(Color.black) // *change the button background color to black*
                    .cornerRadius(20)
            )
            .padding(.horizontal, 10) // *margin of 10px on each side*
            .opacity(configuration.isPressed ? 0.7 : 1)
    

struct ContentView: View 
    var body: some View 
        HStack 
            Button("Login") 
                print("click")
            
            .buttonStyle(CustomButtonStyle())
            Button("Register") 
                print("click")
            
            .buttonStyle(CustomButtonStyle())
        
    

【讨论】:

【参考方案2】:

=> 长话短说

愿有人发现它很方便。

struct test: View 
let roundRect = RoundedRectangle(cornerRadius: 25.0)
var body: some View 
    HStack 
        Button( action: 
            print("click")
        )
            Text("Login")
                .frame(width: UIScreen.main.bounds.width*0.4, height: 50, alignment: .center)
                .background(roundRect.fill(Color.orange))
                .overlay(roundRect.stroke())
        
    .foregroundColor(.purple)
  

【讨论】:

【参考方案3】:

我们能记住的最重要的事情是,当我们面临不确定大小的情况时,然后使用形状填充所有可用空间,然后根据需要限制它们,就像我在代码中所做的那样,您可以将数字更改为您的设计。

import SwiftUI

struct ContentView: View 
    var body: some View 

        HStack 
            
            Button( action: 
                
                print("Login Button")
                
            )
                
                CustomButtonView(stringOfButton: "Login")
                
                
            
            
            Button( action: 
                
                print("Register Button")
                
            )
                
                CustomButtonView(stringOfButton: "Register")

            
            
        
        .padding()

        
    


struct CustomButtonView: View 
    
    var stringOfButton: String
    

    var body: some View 
        
        ZStack 
            
            Rectangle()
                .fill(Color.black)
                .cornerRadius(20)
                .overlay(
                    RoundedRectangle(cornerRadius: 20)
                        .stroke(Color.purple, lineWidth: 1)
                )
                .frame(height: 50, alignment: .center)
            
            Text(stringOfButton)
                .foregroundColor(.purple)
            
        
        
    


【讨论】:

以上是关于SwiftUI 中的按钮大小和颜色的主要内容,如果未能解决你的问题,请参考以下文章

根据 SwiftUI 中的状态(正常、突出显示、禁用)更改按钮颜色?

无法在 SwiftUI 中的菜单内设置按钮标签的颜色

更改导航按钮 SwiftUI 的颜色

SwiftUI - 颜色选择器 - ***大小

在 SwiftUI 中点击更改按钮背景颜色

SwiftUI - 点击按钮更改 VStack 的背景颜色