进行重大修改以澄清问题
我想要的是:为了使Text
视图在屏幕的左侧或右侧对齐,以扩展到特定的最大宽度,当文本达到该长度时,它不会超出该宽度。当要显示的文本太长时,Text
视图仅增加高度来说明其他文本。苹果的Messages应用程序就是一个例子:已发送的消息一直向右对齐,但是即使它们很长,左侧也仍然有一个空白空间(聊天气泡的宽度仅占到75%左右)。屏幕的宽度)。
我有一些硬编码值的代码可以提供示例:
struct ContentView: View {
let messages = [
"Hello.",
"Hi",
"Text so long that it could reach all the way to the other side of the screen, we only want it to take up a width of about 75% of the screen though starting from the left. That is the main issue of this post.",
"Yeah. This message is also long enough to take up the full width of the screen, but for this one we want it to take up 75% of the screen starting all the way on the right side.",
"What are we gonna do.",
"IDK."
]
var body: some View {
VStack {
List {
ForEach(0...5, id: \.self) { number in
Text(messages[number])
.frame(maxWidth: .infinity, alignment: number % 2 == 0 ? .leading : .trailing)
}
}
}
}
}
所以我几乎可以得到我想要的东西,所有其他消息都正确对齐。但是,当Text
视图中的字符串很长时,Text
视图的宽度会 all 扩展,直到高度开始扩展。我希望宽度只在高度开始扩展之前扩展一个设定的量。
我知道Text
视图的宽度扩大以适合文本是正常现象,但是我想知道是否有办法改变它。我唯一想做的就是更改maxWidth
,但是这只会导致.trailing
Text
的右边缘向左移动,这是不必要的。
答案 0 :(得分:1)
ForEach(previouslyPlayed, id: \.self) { data in
Text(data.text)
.lineLimit(nil)
.multilineTextAlignment(.trailing)
.foregroundColor(ColorManager.mainText)
.font(.custom("Courier New", size: 14))
.fixedSize(horizontal: false, vertical: true)
}
答案 1 :(得分:0)
这是最终为我工作的代码。使用固定宽度Spacer
,而不是以某种方式为Text
视图设置最大宽度。
var body: some View {
VStack {
List {
ForEach(0...5, id: \.self) { number in
HStack {
if number % 2 != 0 {
Spacer()
.frame(minWidth: 20, maxWidth: .infinity)
}
Text(messages[number])
if number % 2 == 0 {
Spacer()
.frame(minWidth: 20, maxWidth: .infinity)
}
}
}
}
}
}