我本质上正在构建一个记忆应用程序,点击键盘上的按钮从预定字符串中获取下一个单词,并将其添加到输出的文本中,如下所示:
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 = …Run Code Online (Sandbox Code Playgroud) 在某些情况下,即使有足够的空间, UILabel 似乎也会为新行带来额外的单词,例如,
如果再加一个词,
即使我强制标签的宽度变成如下所示,它仍然会将包含“c”的单词移动到下一行,
我已经尝试扭曲 UILabel 的配置,但似乎它的行为是相同的,除非我将换行模式设置为字符换行,以下是上述情况的配置,
和约束(在前两种情况下,尾随 ),
这种特殊行为是否有任何原因,我可以解决这个问题吗?以这种方式让那个空间清空看起来很奇怪。
我正在尝试将 aUILabel中的每一行添加到数组中,但我使用的代码似乎并不十分准确。
func getLinesArrayOfStringInLabel(label:UILabel) -> [String] {
guard let text: NSString = label.text as? NSString else { return [] }
let font:UIFont = label.font
let rect:CGRect = label.frame
let myFont: CTFont = CTFontCreateWithName(font.fontName as CFString, font.pointSize, nil)
let attStr:NSMutableAttributedString = NSMutableAttributedString(string: text as String)
attStr.addAttribute(NSAttributedStringKey.font, value:myFont, range: NSMakeRange(0, attStr.length))
let frameSetter:CTFramesetter = CTFramesetterCreateWithAttributedString(attStr as CFAttributedString)
let path: CGMutablePath = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: rect.size.width, height: 100000))
let frame:CTFrame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, nil)
let lines …Run Code Online (Sandbox Code Playgroud)