SwiftUI 中的 Text.lineLimit() 行为不一致

Posted

技术标签:

【中文标题】SwiftUI 中的 Text.lineLimit() 行为不一致【英文标题】:Text.lineLimit() behavior is inconsistent in SwiftUI 【发布时间】:2019-06-14 17:45:01 【问题描述】:

我在 VStack 中有一些描述文本,我想将其限制为 3 行。我的理解是我用.lineLimit(3) 修饰符修改Text()。但是,当我这样做时,一些描述的上限为 3 行,而其他描述的上限为 1。关于发生这种情况的位置似乎没有任何一致性。

我认为这可能是我调用修饰符属性的顺序,但是切换.font(.body).lineLimit 的顺序并没有改变任何东西。我也试过删除.padding(),也不管用。

List(clubData)  club in
            VStack(alignment: .leading) 

                Text(club.name)
                    .font(.title)
                    .lineLimit(nil)

                Text(club.subtitle)
                    .lineLimit(4)
                    .font(.body)
            
            .padding()
        

这是正在发生的事情的图片:

【问题讨论】:

它处于测试阶段,期待最坏的情况! 期待并报告。 :-P 啊,我知道了。提交了雷达???? 仅供参考,Xcode 11 beta 3 也有同样的问题。 【参考方案1】:

Xcode 11 GM 的这个答案也可能会帮助您:

https://***.com/a/56604599/30602

总结是,在其他构建器中,您需要将.fixedSize(horizontal: false, vertical: true) 添加到您的 Text() 以使其换行。

【讨论】:

哇。非常感谢 Apple 提供了一种非常直观的方式来实现这一点。 讽刺>【参考方案2】:

我经历过。

现在,如果您将视图包装在 GeometryReader 中,那么它应该遵守行限制

例如

GeometryReader  _ in
    VStack(alignment: .leading) 
       ...
    

【讨论】:

谢谢!在几何阅读器中包装我的文本视图解决了我在使用 .font(.system(size: 120))、.minimumScaleFactor(0.1) 和 .lineLimit(1) 时设备旋转时文本收缩的问题【参考方案3】:

答案是下载 Xcode 11.2 BETA。 App Store 中的 Xcode 11 GM 也存在 .linelimit(nil) 被限制在一行的问题。

【讨论】:

【参考方案4】:

2019 年 12 月 12 日,Xcode 11.2.1

不要相信 .lineLimit,使用 frame 来设置合适的高度(根据你的字体大小)来包裹你的多行文本。而且,请勿使用 .lineSpacing,即使您认为自己的高度足够,SwiftUI 也必须有一种真正“特殊”的方式来确定 VStack 高度是否足够以及要显示多少行。

【讨论】:

【参考方案5】:

2020 年 4 月 23 日,Xcode 11.4

在我的例子中,我从 TMDB API 获取电影描述文本,它是动态长度的。它嵌入在 VStack 中。

真的很生气。即使我设置了 .linelimit(nil),描述文本的行,它仍然会有一个限制,最终会忽略一些文本作为“长描述......”。

【讨论】:

以上是关于SwiftUI 中的 Text.lineLimit() 行为不一致的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画

SwiftUI 中的@FetchRequest

SwiftUI:随机“调用中的额外参数”错误

如何知道 UIKit 视图控制器中的 swiftUI 事件? ||如何提供 swiftUI 和 uikit 之间的通信

SwiftUI:表单中的按钮

SwiftUI 中的记忆?