基本结构
1 2 3 4 5 6 7 8 9 10 11 12
| import SwiftUI
struct SwiftUIView: View { var body: some View {
} }
#Preview { SwiftUIView() }
|
文本
添加文本
显示文本为"Hello world!"
以变量形式保存文本并显示
设置文本属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Text("Hello world!".capitalized) .font(.title) .fontWeight(.ultraLight)
.bold() .underline((true, color: Color.red)) .italic() .strikethrough(true, color: Color.green) .font(.system(size: 24, weight: semibold, design: .serif)) .multilineTextAlignment(.center) .baselineOffset(50.0) .kerning(1.0) .foreground(.red) .frame(width: 200, height: 100, alignment: .center) .minimumScaleFactor(0.1)
|
图形
添加图形
1 2 3 4 5
| Circle() Ellipse() Capsule() Rectangle() RoundedRectangle()
|
图形属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Circle() .foregroundColor(.pink) .stroke() .stroke(Color.red, lineWidth: 30) .stroke(Color.orange, style: StrokeStyle(linewidth: 20, lineCap: .butt, dash[10])) .trim(from: 0.5, to: 1.0) .frame(width: 200, height: 100) .inset(by: 40) .frame(minWidth: 100, maxHeight: 200) .frame(maxWidth: .infinity, maxHeight: 100) .border(Color.black) .offset(x: 114, y: 514) Capsule(style: .circular) RoundedRectangle(cornerRadius: 50)
|
留白间距
颜色与阴影
填充
1 2 3 4
| RoundedRectangle() .fill(Color(UIColor.secongarySystemBackground)) .shadow(color: Color.red .opacity(0.3), radius: 10, x: 0, y: -20) .background(Color.yellow)
|
自定义颜色
1.前往Assess.xcassets
,添加一个Color Set
,命名为CustomColor
,之后选择颜色。
2.
1 2
| RoundedRectangle() .Color("CustomColor")
|
渐变色
1 2 3
| Rectangle() .fill(LinearGradient(gradient: Gradient(colors: [Color.red, Color.blue]), startPoint: .leading, endPoint: .bottom))
|
图像
引用图像
将图像添加到Assest
中,然后用Image()
引用。
这是个免费自由的图片,将以原始大小显示。
引用系统图标
1
| Image(systemName: "globe")
|
图像属性
1 2 3 4
| Image("ImageName") .resizable() .scaledToFit() .scaledToFill()
|
垂直、水平与叠加视图
垂直视图
1 2 3 4 5 6 7 8 9 10 11 12 13
| var body: some View { VStack( alignment: .leading, spacing: 10 ) { ForEach( 1...10, id: \.self ) { Text("Item \($0)") } } }
|
上述10个item将按垂直
方向排列,如图所示:
水平视图
1 2 3 4 5 6 7 8 9 10 11 12 13
| var body: some View { HStack( alignment: .top, spacing: 10 ) { ForEach( 1...5, id: \.self ) { Text("Item \($0)") } } }
|
上述5个item将按水平
方向排列,如图所示:
堆叠视图
1 2 3 4 5 6 7 8 9 10 11 12 13
| let colors: [Color] = [.red, .orange, .yellow, .green, .blue, .purple] var body: some View { ZStack { ForEach(0..<colors.count) { Rectangle() .fill(colors[$0]) .frame(width: 100, height: 100) .offset(x: CGFloat($0) * 10.0, y: CGFloat($0) * 10.0) } } }
|
例子创建了6种颜色的大小为100x100的正方形
堆叠,并偏移10点。
1 2 3 4 5 6 7 8 9 10 11
| var body: some View { ZStack(alignment: .bottomLeading) { Rectangle() .fill(Color.red) .frame(width: 100, height: 50) Rectangle() .fill(Color.blue) .frame(width:50, height: 100) } .border(Color.green, width: 1) }
|
例子创建了2个堆叠于左下角
的矩形,并使用绿色外框
。
Stack 属性
VStack(仅左右对齐)
1 2 3 4
| VStack (alignment: .leading) { } VStack (alignment: .trailing) { }
|
HStack(仅上下对齐)
1 2 3 4
| HStack (alignment: .top) { } HStack (alignment: .bottom) { }
|
元素对齐方式
1 2
| Image(systemName: "globe") .frame(alignment: .leading)
|
视图间距
1 2
| HStack(spacing: 114){ }
|
元素间距
1 2 3 4 5 6
| Image(systemName: "globe") .padding(.trailing, 1) .padding(.leading, 14) .padding(.top, 5) .padding(.bottom, 14) .padding(.horizontal, 19)
|
待续…