我正在构建一个记忆应用程序,点击键盘上的一个按钮,从预定的字符串中提取下一个单词,并将其添加到输出的文本中,如下所示:
struct TypingGameView: View {
@State var text: String = "Some text that wraps at the incorrect spot and is quite annoying."
@State var outputText: String = ""
@State private var enteredText: String = ""
@State private var wordsTapped = 0
var body: some View {
ZStack {
TextField("", text: $enteredText)
.onChange(of: enteredText) { newValue in
addToOutputText(newValue)
}
Rectangle()
.foregroundColor(.white)
VStack {
Text(outputText)
.frame(maxWidth: .infinity, alignment: .leading)
.padding()
Spacer()
}
}
}
func addToOutputText(_ val: String) {
let words = text.components(seperatedBy: " ")
for (index, word) in words.enumerated() {
if index = wordsTapped {
outputText += "\(word) "
wordsTapped += 1
return
}
}
}
}
问题是,第一行的最后一个单词只有在它后面有一个其他单词时才跳到下一行,但一旦后面有更多的单词,就跳回到第一行。见下图:
据我所知,这是SwiftUI中Text
视图的一个自动功能,用于防止出现任何孤立单词。我想禁用此功能,因为它会使单词在我创建的视图中跳来跳去。我在UIKit中看到过使用CATextLayer
的解决方案(请参阅UILabel和UITextView的换行符不匹配和获取UILabel中的每一行文本)、但我需要一些与SwiftUI @State
Package 器一起工作的东西,并希望有一个使用所有SwiftUI的解决方案。最终目标是获得与上述视频相同的功能,但没有自动修复孤儿。
**编辑:**刚刚尝试使用Group
,每个单词都有单独的Text
视图。仍然执行相同的操作:/
2条答案
按热度按时间mcdcgff01#
为了扩展Wamba的答案,你可以使用零宽度空格,这样如果文本在一行上,它后面就不会有可见的空格,也不可能换行到第三行。
这是一个黑客,我不喜欢它,但应用程序用户看不到黑客代码,只有一个奇怪的用户界面,所以这是可取的,直到苹果最终给SwiftUI相同的功能作为UIKit。
m4pnthwp2#
只需在字符串末尾添加三个空格: