我想在视图的所有 4 个侧面输出一些文本。这是我的代码:
var body: some View {
Spacer()
Text("AA BB CC DD EE FF GG HH")
Spacer()
HStack {
Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: -90))
Spacer()
Text("AA BB CC DD EE FF GG HH").rotationEffect(Angle(degrees: 90))
}.frame(height: 200)
Spacer()
Text("AA BB CC DD EE FF GG HH")
Spacer()
}
}
问题:
- 为什么文本左绕行,但相同的文本却没有右绕行?我怎样才能避免包裹?
- 为什么文本左边距与右边文本不同?我怎样才能使它们平等?
我认为问题的一部分在于,您没有强迫两者居中,而且其中一个也被绘制,其布局优先级高于另一个。因此,如果将它们的框架宽度设置为最大值,则每个框架将占据 1/2 的视图。请注意,rotationEffect 实际上并不调整
frame
旋转。让帧不断匹配是解决此问题的唯一“正确”方法,或者使用其他格式技巧,例如
.minimumFontScale(..)
或 甚至.lineLimit(..)
.例子
在这个例子中,我可以获得各种动态类型的预期输出,如下所示。
xTwisteDx 的回答很好(+1,接受)。我对其进行了一些修改,以避免旋转文本的文本换行。
它们被换行,因为文本旋转发生在文本布局之后。当旋转修饰符被注释掉时可以看到这一点。那么,这两个文本根本无法放在一行上。
为了获得展开的旋转文本,我将它们放入 a 中
ZStack
,一个文本向左调整,另一个向右调整,使用Spacers
. 这样,两个未旋转的文本都可以使用整个屏幕宽度,并且不会换行。旋转后,一切看起来都正确。
这是代码: