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 中的手风琴风格动画