文本视图的 lineBreakMode 是不是有 SwiftUI 等效项?

Posted

技术标签:

【中文标题】文本视图的 lineBreakMode 是不是有 SwiftUI 等效项?【英文标题】:Is there a SwiftUI equivalent for lineBreakMode for Text views?文本视图的 lineBreakMode 是否有 SwiftUI 等效项? 【发布时间】:2019-09-15 14:37:27 【问题描述】:

我有一个文本视图,我想将它配置为包裹第一个不适合的字符。在 UIKit 中,这相当于设置 label.lineBreakMode = .byCharWrapping。这已经为 SwiftUI Text 实现了吗?我在documentation for Text 中找不到任何内容。

我想这样做的原因是我要向用户显示一个长代码,所以最好用字符而不是单词来换行。

【问题讨论】:

【参考方案1】:

不确定这是否有帮助,但我正在使用以下内容,这会导致长词被字符包裹:

Text("Supercallifragilisticexpialidocious")
    .font(.system(size: 100))
    .minimumScaleFactor(0.01)
    .lineLimit(3)
    .multilineTextAlignment(.leading)

不幸的是,对于我的用例,我不希望文本按字符换行。如果我设置 lineLimit(1) 可以正常工作并且减小字体大小以将文本保持在 1 行。但是,如果 Text 是多个单词,例如 Text("Practically perfect in every way") 那么我希望字符串由单词包裹。我似乎无法同时获得多个单词的自动换行和长单词的字体缩放。

【讨论】:

我遇到了一个问题,如果使用 lineLimit(1),如果设备旋转,文本将变为最小尺寸。如果您更新文本,则它会扩展回正确的全尺寸。为了解决这个问题,如果你将 Text 包装在一个不做任何事情的 GeometryReader 中,就可以解决这个问题。

以上是关于文本视图的 lineBreakMode 是不是有 SwiftUI 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 动态调整大小 - Swift

如何在 iOS 7 中使用 drawInRect:withAttributes: 而不是 drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:ba

iOS-NSLineBreakMode-lineBreakMode属性详解(UILabel省略号位置)

在视图中动态添加多行标签

UILabel标签文字过长时的显示方式

在 SwiftUI 中使用 Text() 换行