【发布时间】:2021-08-29 16:33:08
【问题描述】:
我的代码如下:
import SwiftUI
struct DotView: View {
var body: some View {
GeometryReader { geo in
let width = geo.size.width
VStack() {
Circle()
.frame(width: width, height: width)
Spacer()
Circle()
.frame(width: width, height: width)
}
}
}
}
struct TestView: View {
var body: some View {
GeometryReader { geo in
VStack() {
HStack() {
Text("11")
DotView()
.frame(width: 8, height: 23, alignment: .center)
Text("22")
}
.font(.system(size: 48))
.background(Color.gray)
HStack() {
Text("123456789")
}
.font(.system(size: 30))
.background(Color.gray)
}
.frame(width: geo.size.width, height: geo.size.height)
.background(Color.blue)
}
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
.frame(width: 200, height: 200, alignment: .center)
.cornerRadius(23.0)
}
}
视图如下图,“11:22”和“123456789”之间有间距
但是,当我将视图 DotView 评论为以下代码时:
struct TestView: View {
var body: some View {
GeometryReader { geo in
VStack() {
HStack() {
Text("11")
// DotView()
// .frame(width: 8, height: 23, alignment: .center)
Text("22")
}
.font(.system(size: 48))
.background(Color.gray)
HStack() {
Text("123456789")
}
.font(.system(size: 30))
.background(Color.gray)
}
.frame(width: geo.size.width, height: geo.size.height)
.background(Color.blue)
}
}
}
间距消失。为什么这个 DotView 会影响间距?
【问题讨论】:
-
尽量避免使用
GeometryReader这样的简单布局。仅在需要获取宽度/高度时使用它,并使用它来计算其他内容(例如,宽度为总宽度的 70% 的进度条)