Ios 如何让SwiftUI文本剪辑而不是用点(…)截断
在SwiftUI视图中,我在Ios 如何让SwiftUI文本剪辑而不是用点(…)截断,ios,swiftui,Ios,Swiftui,在SwiftUI视图中,我在HStack中有几个Text元素。根据用户输入,不会有水平空间显示所有文本。HStack通过确保所有文本元素的宽度相等且字符串被截断,可以很好地工作。这一切都是意料之中的,也是应该的 问题是,所有字符串最后都被截断为“…”,而我想要的是UILabel.lineBreakMode=.byClipping,也就是说,字符串应该简单地在文本元素的边缘被截断 我如何做到这一点 有关我想要的内容的更多详细信息,请编辑: import SwiftUI struct TextCl
HStack
中有几个Text
元素。根据用户输入,不会有水平空间显示所有文本。HStack
通过确保所有文本
元素的宽度相等且字符串被截断,可以很好地工作。这一切都是意料之中的,也是应该的
问题是,所有字符串最后都被截断为“…”,而我想要的是UILabel.lineBreakMode=.byClipping
,也就是说,字符串应该简单地在文本
元素的边缘被截断
我如何做到这一点
有关我想要的内容的更多详细信息,请编辑:
import SwiftUI
struct TextClipPoC: View {
var body: some View {
HStack {
textElm
textElm
textElm
textElm
}
}
var textElm: some View {
Text("abcdefghijklmn")
.padding(.all, 3)
.background(Color.yellow)
}
}
struct TextClipPoC_Previews: PreviewProvider {
static var previews: some View {
TextClipPoC()
.previewLayout(.fixed(width: 320, height: 40))
}
}
给出此输出:
我想要与上面完全相同的输出,除了我想要的文本只是剪辑而不是“…”
如果我只是按照解决方案中的建议,将.fixedSize()
添加到HStack
(或文本
元素),我会得到以下结果:
为了避免截断,它需要使用固定大小,如
HStack {
... your text items here
}
.fixedSize()
其他一切都取决于使用环境,需要在某个上层容器上进行.clipped
其他可能的解决方案是使用停用的滚动视图
,如
ScrollView(.horizontal) {
HStack {
... your text items here
}
}.disabled(true)
一种解决方案是覆盖相同
文本的两个实例,一个固定大小,一个正常大小,让正常大小决定大小并隐藏,然后剪裁固定大小
可以使用viewmodifier
:
struct FixedClipped: ViewModifier {
func body(content: Content) -> some View {
ZStack(alignment: .leading) {
content.hidden().layoutPriority(1)
content.fixedSize(horizontal: true, vertical: false)
}
.clipped()
}
}
extension View {
func fixedClipped() -> some View {
self.modifier(FixedClipped())
}
}
然后像这样使用:
struct TextClipPoC: View {
var body: some View {
HStack {
textElm
textElm
textElm
}
}
var textElm: some View {
Text("abcdefghijklmn")
.padding([.leading, .trailing], 3)
.background(Color.yellow)
.fixedClipped()
}
}
struct TextClipPoC_Previews: PreviewProvider {
static var previews: some View {
TextClipPoC()
.previewLayout(.fixed(width: 320, height: 40))
}
}
这将产生以下结果:
我知道我已将此标记为已接受,但似乎无法获得所需的结果。我编辑了我的问题以澄清。