SwiftUI 文本对齐对齐

has*_*o11 5 text text-alignment swiftui

有没有人找到一种方法以Text合理的方式将字符串对齐?

在我的阅读应用,我想向用户提供选择合理的定位,其中两个在.leading两个.trailing比对是真正的在同一时间。不幸的是, 的.multilineTextAlignment修饰符Text只有三个选项:.leading,.center.trailing

如果没有,我仍然可以将 an 包装UILabel到 a 中,UIViewRepresentable因为UILabel.justified对齐选项,但我认为它也应该在 the 中可用,但我Text找不到它。

Bas*_*sil 4

我知道我迟到了,但我遇到了同样的问题,我将在这里写下来,它可以帮助其他开发人员将来

不幸的是,到目前为止 Apple 还不支持.justifiedSwiftUI 2.0

你需要依赖 UIKit

在您的项目中添加此代码

   struct LabelAlignment: UIViewRepresentable {
    var text: String
    var textAlignmentStyle : TextAlignmentStyle
    var width: CGFloat

    func makeUIView(context: Context) -> UILabel {
        let label = UILabel()
        label.textAlignment = NSTextAlignment(rawValue: textAlignmentStyle.rawValue)!
        label.numberOfLines = 0
        label.preferredMaxLayoutWidth = width
        label.setContentHuggingPriority(.required, for: .horizontal)
        label.setContentHuggingPriority(.required, for: .vertical)

        return label
    }

    func updateUIView(_ uiView: UILabel, context: Context) {
        uiView.text = text
    }
}

enum TextAlignmentStyle : Int{
     case left = 0 ,center = 1 , right = 2 ,justified = 3 ,natural = 4
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

LabelAlignment(text: "Your text here", textAlignmentStyle: .justified, width: UIScreen.main.bounds.width - 20)
Run Code Online (Sandbox Code Playgroud)

将 20 更改为您想要在左侧和右侧添加空格的任何数字

我的解决方案将取决于文本内容大小,如果文本很小,视图就会很小,反之亦然,因此它将充当 Text()