【问题标题】:Is there a way to disable SwiftUI's Text automatic orphaning fix?有没有办法禁用 SwiftUI 的文本自动孤立修复?
【发布时间】:2022-08-04 15:56:22
【问题描述】:

我基本上正在构建一个记忆应用程序,点击键盘上的按钮从预定字符串中获取下一个单词,并将其添加到输出文本中,如下所示:

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 and UITextView line breaks don\'t matchGet each line of text in a UILabel),但我需要一些可以与 SwiftUI @State 包装器一起使用的解决方案,并且更喜欢使用所有 SwiftUI 的解决方案。最终目标是获得与上述视频相同的功能,但不会自动修复孤儿。

编辑:刚刚尝试使用 Group 和每个单词的内部 Text 视图。仍然做同样的事情:/

  • 你找到克服这个问题的方法了吗?
  • @demon9733 到目前为止,我能想到的最好的方法是将所有文本同时显示在屏幕上,但设置为 .foregroundColor(.clear),然后在键入正确的字母时一次设置一个单词为 .black .感觉很hacky,占用了大量的系统资源,可能不是很好的可访问性,但它是我所拥有的最好的。

标签: swift swiftui


【解决方案1】:

只需在字符串末尾添加三个空格:

let myString: String = "Modo ligth (colores predefinidos claros)."

Text(myString)

let myString: String = "Modo ligth (colores predefinidos claros)."
let myNewString: String = myString + "   " // <- Three additional spaces

Text(myNewString)

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 2021-03-15
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-12-10
    相关资源
    最近更新 更多