提问人:Churro the Duck 提问时间:10/11/2023 更新时间:10/11/2023 访问量:46
如何确保在 SwiftUI 中,带有符号的字词不会被拆分为两行?
How can I make sure words with symbols in them are not split between two lines in SwiftUI?
问:
我正在使用 SwiftUI 显示 .它显示的文本是“麦克唐纳道格拉斯 F/A-18 大黄蜂。它在两个字母“F”和“A”之间包含一个“/”。现在,文本被分成两半,第一行是“McDonnell Douglas F/”,第二行是“A-18”。TextView
这就是现在正在发生的事情:
我想要这个:
我的代码:
import SwiftUI
struct ContentView: View {
var body: some View {
GeometryReader { g in
Text("McDonnell Douglas \nF/A-18")
.font(.system(size: g.size.width * 1 / 20))
.frame(width: g.size.width / 2)
.border(.black)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
注意:我知道这可用于换行符,但这不适用于我的情况,因为不同设备的屏幕尺寸会有所不同,而且我不知道换行符的位置。谢谢!\n
答:
2赞
Sweeper
10/11/2023
#1
您可以使用 Unicode 字符 U+FEFF ZERO WIDTH NO-BREAK SPACE 表示不能有换行符。
Text("McDonnell Douglas F\u{FEFF}/\u{FEFF}A-18")
如果文本是动态的,请使用 replacingOccurrences
或正则表达式替换所需的字符。
评论
0赞
Churro the Duck
10/11/2023
谢谢!你知道哪些字符需要 unicode 字符才能不被分解吗?例如,我是否也需要将它们括在连字符周围?
0赞
Sweeper
10/11/2023
@Tiger 我不确定,但我认为每个单词的边界都可以打破(?连字符绝对可以分解。如果您不想要任何换行符,为什么不直接呢?这个问题也可能是相关的,尽管它没有答案。lineLimit(1)
0赞
Rob Napier
11/11/2023
一般算法解释如下:unicode.org/reports/tr14。的规则在某种程度上故意模棱两可(见 unicode.org/reports/tr14/#SY)。不幸的是,我不知道有什么简单的方法可以将一个部分标记为牢不可破,除了在每对字符之间注入 FEFF,这当然是可能的,但非常令人讨厌。它还对复制和粘贴产生了不幸的影响。我可能会在 VStack 中使用两个单独的文本来解决这个特定问题。/
评论