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

Text.lineLimit() behavior is inconsistent in SwiftUI

我在 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()
        }

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

我经历过。

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

例如

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

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

您可能还会对 Xcode 11 GM 的这个答案有所帮助:

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

2019 年 12 月 12 日 Xcode 11.2.1

不要相信 .lineLimit,使用 frame 设置适当的高度(根据您的字体大小)来包裹您的多行文本。而且,不要使用 .lineSpacing 即使你认为你的高度足够了,SwiftUI 必须有一个真正的 'special' 方法来确定 VStack 高度是否足够以及要显示多少行.

2020 年 4 月 23 日,Xcode11.4

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

真是气死了。即使我设置了 .linelimit(nil),描述文本的行,它仍然有一个限制并最终忽略一些文本 "long decription...".