我试图得到的宽度一个视图占据一半的屏幕,但我很难想到一种方法来做到这一点
我试着用几何阅读器
HStack{
Spacer()
Text(displayedText)
.background(
GeometryReader { geometry in
Color.clear
.preference(key: TextWidthKey.self, value: geometry.size.width)
}
)
.onPreferenceChange(TextWidthKey.self) { width in
textWidthOnRight = width / 2
}
Spacer()
}
struct TextWidthKey: PreferenceKey {
static var defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
}
}
但问题是,文本并没有在屏幕的两侧均匀划分,因此计算不准确
1条答案
按热度按时间zvms9eto1#
我不太确定,为什么你的问题中的代码不应该提供正确的结果,如果文本是在两个
Spacer
之间的HStack
。我希望它是完全居中的,所以一半的文本宽度将在右手边。但是,如果两个
Spacer
中的一个不在那里,那就另当别论了,因为这样文本就会被推到左边或右边。在这种情况下,要找到右侧宽度,您需要参考全视图宽度以及文本框架在全局坐标空间中的位置。就像这样:
你会注意到有两种特殊情况正在处理: