Ios 如何让SwiftUI文本剪辑而不是用点(…)截断

Ios 如何让SwiftUI文本剪辑而不是用点(…)截断,ios,swiftui,Ios,Swiftui,在SwiftUI视图中,我在HStack中有几个Text元素。根据用户输入,不会有水平空间显示所有文本。HStack通过确保所有文本元素的宽度相等且字符串被截断,可以很好地工作。这一切都是意料之中的,也是应该的 问题是,所有字符串最后都被截断为“…”,而我想要的是UILabel.lineBreakMode=.byClipping,也就是说,字符串应该简单地在文本元素的边缘被截断 我如何做到这一点 有关我想要的内容的更多详细信息,请编辑: import SwiftUI struct TextCl

在SwiftUI视图中,我在
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))
    }
}
这将产生以下结果:

我知道我已将此标记为已接受,但似乎无法获得所需的结果。我编辑了我的问题以澄清。