Fra*_*ool 3 button swift swiftui
我正在尝试使用创建计算器SwiftUI,我现在正在努力创建按钮网格以水平填充可用空间
现在,我只是想让按钮填充3 x 3高度和宽度相等的网格
我能够通过使用使它们相同的高度Spacer(),根据这个答案,但相同的宽度是在哪里我现在卡住权:
import SwiftUI
struct ContentView : View {
var body: some View {
VStack(alignment: .center, spacing: 50) {
HStack(alignment: .center, spacing: 50) {
Button(action: {}) {
Text("7")
Spacer()
}.background(Color.green)
Button(action: {}) {
Text("8")
Spacer()
}.background(Color.yellow)
Button(action: {}) {
Text("9")
Spacer()
}.background(Color.green)
}
HStack(alignment: .center, spacing: 50) {
Button(action: {}) {
Text("4")
Spacer()
}.background(Color.yellow)
Button(action: {}) {
Text("5")
Spacer()
}.background(Color.green)
Button(action: {}) {
Text("6")
Spacer()
}.background(Color.yellow)
}
HStack(alignment: .center, spacing: 50) {
Button(action: {}) {
Text("1")
Spacer()
}.background(Color.green)
Button(action: {}) {
Text("2")
Spacer()
}.background(Color.yellow)
Button(action: {}) {
Text("3")
Spacer()
}.background(Color.green)
}
}.aspectRatio(contentMode: .fill)
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
这是我当前的输出与我想要的期望输出的示例。首先,我尝试使按钮填充当前区域,稍后,我将尝试使0按钮填充2个单元格。
如何使用GeometryReader(此处的文档)?他们将子视图的尺寸提供给孩子。这是基于您已有的部分实现:
import SwiftUI
struct ContentView : View {
var body: some View {
VStack {
Text("0")
NumpadView()
}
}
}
struct NumpadView : View {
let rows: Length = 5
let columns: Length = 4
let spacing: Length = 10
var horizontalEdges: Length {
return columns - 1
}
var verticalEdges: Length {
return rows - 1
}
func getItemWidth(containerWidth: Length) -> Length {
return (containerWidth - spacing * horizontalEdges) / columns
}
func getItemHeight(containerHeight: Length) -> Length {
return (containerHeight - spacing * verticalEdges) / rows
}
var body: some View {
GeometryReader { geometry in
VStack(alignment: .center, spacing: self.spacing) {
HStack(alignment: .center, spacing: self.spacing) {
Button(action: {}) {
Text("7")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.green)
}
Button(action: {}) {
Text("8")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
Button(action: {}) {
Text("9")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.green)
}
}
HStack(alignment: .center, spacing: self.spacing) {
Button(action: {}) {
Text("4")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
Button(action: {}) {
Text("5")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.green)
}
Button(action: {}) {
Text("6")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
}
HStack(alignment: .center, spacing: self.spacing) {
Button(action: {}) {
Text("1")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.green)
}
Button(action: {}) {
Text("2")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
Button(action: {}) {
Text("3")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.green)
}
}
HStack(alignment: .center, spacing: self.spacing) {
Button(action: {}) {
Text("0")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width) * 2 + self.spacing, height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
Button(action: {}) {
Text(".")
.frame(width: self.getItemWidth(containerWidth: geometry.size.width), height: self.getItemHeight(containerHeight: geometry.size.height))
.background(Color.yellow)
}
}
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1007 次 |
| 最近记录: |