在 SwiftUI 中强制视图位于视图的右下角
Forcing a View to the bottom right of View in SwiftUI
我正在通过在 YouTube 上发布的 2020 版斯坦福大学 CS193p 自学 SwiftUI。
我想要 ZStack
右下方有一个复选框。此代码打勾
就在视图的中间。
ZStack {
.... stuff ....
Text("✓")
}
令我惊讶的是,此代码将复选标记放在视图的左上角。 (我 GeometryReader
的心理模型显然是错误的。)
ZStack {
.... stuff ...
GeometryReader { _ in Text("✓") }
}
我无法按照另一个 Whosebug 答案中的建议使用 ZStack(alignment: .bottomTrailing) { ... }
,因为我希望对齐仅应用于文本,而不应用于其他任何内容。
有没有什么办法可以得到右下角的复选标记?我试图避免绝对偏移,因为无论 ZStack
视图的大小如何,我都希望我的代码能够正常工作。另外,有没有好的布局教程,让我自己找出这些问题的答案?
[如果您想知道的话。我正在玩家庭作业 3。我正在添加一个“作弊模式”,如果板上有匹配集,它会用一个小复选标记标记它们。]
尝试申请
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .bottomTrailing)
到文本。
我会说,如果您知道 Text
的大小和 ZStack
中最大的子视图,这是可能的。
在下面的示例中,我使用 40 作为 Text
宽度,20 作为 Text
高度,200(正方形)用于最大的 Color
子视图。然后,您可以使用相对偏移和布局指南计算子视图偏移。
如果您不想像上面的答案一样扩展文本来填充容器,这将很有用。
struct ColorsView: View {
var body: some View {
ZStack(alignment: .center) {
Color.red.frame(width: 200,
height: 200,
alignment: .center)
Text("Bye")
Text("Hello").frame(width: 40, height: 20)
.alignmentGuide(HorizontalAlignment.center, computeValue: { dimension in
-60
})
.alignmentGuide(VerticalAlignment.center, computeValue: { dimension in
-80
})
}
}
}
我正在通过在 YouTube 上发布的 2020 版斯坦福大学 CS193p 自学 SwiftUI。
我想要 ZStack
右下方有一个复选框。此代码打勾
就在视图的中间。
ZStack {
.... stuff ....
Text("✓")
}
令我惊讶的是,此代码将复选标记放在视图的左上角。 (我 GeometryReader
的心理模型显然是错误的。)
ZStack {
.... stuff ...
GeometryReader { _ in Text("✓") }
}
我无法按照另一个 Whosebug 答案中的建议使用 ZStack(alignment: .bottomTrailing) { ... }
,因为我希望对齐仅应用于文本,而不应用于其他任何内容。
有没有什么办法可以得到右下角的复选标记?我试图避免绝对偏移,因为无论 ZStack
视图的大小如何,我都希望我的代码能够正常工作。另外,有没有好的布局教程,让我自己找出这些问题的答案?
[如果您想知道的话。我正在玩家庭作业 3。我正在添加一个“作弊模式”,如果板上有匹配集,它会用一个小复选标记标记它们。]
尝试申请
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .bottomTrailing)
到文本。
我会说,如果您知道 Text
的大小和 ZStack
中最大的子视图,这是可能的。
在下面的示例中,我使用 40 作为 Text
宽度,20 作为 Text
高度,200(正方形)用于最大的 Color
子视图。然后,您可以使用相对偏移和布局指南计算子视图偏移。
如果您不想像上面的答案一样扩展文本来填充容器,这将很有用。
struct ColorsView: View {
var body: some View {
ZStack(alignment: .center) {
Color.red.frame(width: 200,
height: 200,
alignment: .center)
Text("Bye")
Text("Hello").frame(width: 40, height: 20)
.alignmentGuide(HorizontalAlignment.center, computeValue: { dimension in
-60
})
.alignmentGuide(VerticalAlignment.center, computeValue: { dimension in
-80
})
}
}
}