In swiftui, How do I increase the height of a butt

2020-03-18 08:25发布

As you can see in the screenshot, the button height does not adjust to fit the text size, making it look ugly. How can I increase the hight of the buttons, so it does not look stupid. My question is, how do I increase the height of buttons in swiftui. I am trying to make the titlescreen of my minecraft like game.

    struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            VStack (spacing: 8) {
                Text("[Name not disclosed]Craft").font(.system(size: geometry.size.width/8))
                Button(action: {

                }) {
                    Text("Singleplayer").font(.system(size: geometry.size.width/20))
                        .frame(minWidth: geometry.size.width/2)
                }
                Button(action: {

                }) {
                    Text("Multiplayer").font(.system(size: geometry.size.width/20))
                        .frame(minWidth: geometry.size.width/2)
                }
                HStack (spacing: 8) {
                    Button(action: {

                    }) {
                        Text("Options").font(.system(size: geometry.size.width/20))
                            .frame(minWidth: (geometry.size.width/4)-16)
                    }
                    Button(action: {
                        exit(EXIT_SUCCESS);
                    }) {
                        Text("Quit Game").font(.system(size: geometry.size.width/20))
                            .frame(minWidth: (geometry.size.width/4)-16)
                    }
                }
            }
        }
    }
}

Not nicely looking window

4条回答
够拽才男人
2楼-- · 2020-03-18 08:36

You need to change height of the stack

struct ContentView: View {

   @State private var arr = ["String"]

    var body: some View {

         GeometryReader { geometry in
                VStack (spacing: 8) {
                    Text("[Name not disclosed]Craft").font(.system(size: geometry.size.width/8))
                    Button(action: {

                    }) {
                        Text("Singleplayer").font(.system(size: geometry.size.width/20))
                            .frame(minWidth: geometry.size.width/2)
                    }
                    Button(action: {

                    }) {
                        Text("Multiplayer").font(.system(size: geometry.size.width/20))
                            .frame(minWidth: geometry.size.width/2)
                    }
                    HStack (spacing: 8) {
                        Button(action: {

                        }) {
                            Text("Options").font(.system(size: geometry.size.width/20))
                                .frame(minWidth: (geometry.size.width/4)-16)
                        }
                        Button(action: {
                            exit(EXIT_SUCCESS);
                        }) {
                            Text("Quit Game").font(.system(size: geometry.size.width/20))
                                .frame(minWidth: (geometry.size.width/4)-16)
                            }
                    } .frame(width: 100, height: 100, alignment: .leading) .background(Color.red)
                }
            }
    }
}
查看更多
戒情不戒烟
3楼-- · 2020-03-18 08:37

Use simpler initializer if you need only a title for your Button:

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

Preview

Note that frame modifier must come before background to make it looks larger. Otherwise, you can't see the difference.

查看更多
够拽才男人
4楼-- · 2020-03-18 08:38

Please try below Code:

Button(action: {
       //do action       
}) {
    Text("SIGN IN")
        .frame(width: 200 , height: 50, alignment: .center)
        //You need to change height & width as per your requirement
}
 .background(Color.blue)
 .foregroundColor(Color.white)
 .cornerRadius(5)

Output enter image description here

查看更多
时光不老,我们不散
5楼-- · 2020-03-18 08:52

You just need to set PlainButtonStyle and draw it as you wish...

Here is for example one of your button:

Button(action: {

}) {
    Text("Singleplayer").font(.system(size: geometry.size.width/20))
        .padding()
        .background(RoundedRectangle(cornerRadius: 8).fill(Color.blue))
        .frame(minWidth: geometry.size.width/2)
}
.buttonStyle(PlainButtonStyle())

custom button

查看更多
登录 后发表回答