ios - 如何让 SwiftUI 文本剪辑而不是用点截断 (...)

标签 ios swiftui

在 SwiftUI View 中,我有几个 Text HStack 中的元素.根据用户输入,不会有水平空间来显示所有文本。 HStack通过确保所有 Text 是否工作正常元素获得相等的宽度并且字符串被截断。这一切都在预料之中,也应该如此。
问题是所有的字符串最后都用“...”截断,而我想要 UILabel.lineBreakMode = .byClipping 的行为,也就是说字符串应该简单地在 Text 的边缘被切断元素。
我如何实现这一目标?
编辑有关我想要的更多详细信息:

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))
    }
}
给出这个输出:
Default truncating behaviour
我想要与上面完全相同的输出,除了“...”我想要文本只是剪辑。
如果我只是添加 .fixedSize()HStack (或到 Text 元素),正如解决方案中所建议的,我得到了这个结果:
With fixed with

最佳答案

一种解决方案是覆盖相同 Text 的两个实例, 一个固定大小和一个正常大小,让正常大小决定大小并将其隐藏,然后将固定大小剪切。
可以用 ViewModfier 来完成:

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))
    }
}
这产生了这个结果:
Clipped text

关于ios - 如何让 SwiftUI 文本剪辑而不是用点截断 (...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62746684/

相关文章:

android - 手机间隙 : SocialSharing phonegap plugin not working with pre filled message in FBDialog

ios - 在 UIView 中绘制圆形透明 View

ios - 使用Interface Builder在iOS中一页页面上的视差标题

ios - 在 SwiftUI 中,我如何知道 Picker 选择何时更改?为什么 didSet 不起作用?

swift - SwiftUI 中的两个 ForEach

ios - Swift - 单击按钮后立即显示带有加载指示器的警报的最佳方式?

ios - 通过 iOS 应用程序将照片和标记的 friend 发布到 Facebook

swift - 如何在通过算法连续更改 View 状态时动态重新渲染 View ?

SwiftUI:隐藏 NavigationLink 目标上的状态栏

swift - 是什么启用了 SwiftUI 的 DSL?