如果不应在SwiftUI中将VStack中的文本截断

时间:2019-09-05 18:29:02

标签: ios swiftui

我正在尝试在Text内创建一个简单的VStack堆栈,无论我做什么,即使我显式设置了{{1},文本也会被截断而不是自动换行}(尽管我现在知道这是默认值)。

我已经尝试在VStack的第一个元素上设置lineLimit(nil),并且还尝试了其他一些帖子所建议的设置layoutPriority(1),但是似乎没有任何解决方法。

以下是该问题的视频:

animated gif of bug repro

以下是一些重现此问题的代码:

frame(idealHeight: .greatestFiniteMagnitude)

这可能只是Xcode中的错误吗?我正在运行Beta 7

4 个答案:

答案 0 :(得分:4)

我想出了如何使文本正确呈现的方法。

在此处应用答案有效:Views compressed by other views in SwiftUI VStack and List

关键是要确保在.fixedSize()之前添加.frame()

不需要Spacer()

答案 1 :(得分:2)

不幸的是,这是一个错误。

有一种解决方法,您可以用它来迫使它重新计算元素,但这只是一种解决方法,您必须等待发布,看看它是否已解决。

不幸的是,这是一个错误。

有一种解决方法,您可以用它来迫使它重新计算元素,但这只是一种解决方法,您必须等待发布,看看它是否已解决。

解决方法

ForEach内容的上方和下方添加一对高度为的分隔符。

struct BugRepro: View {

    @State var length: Double = 1.0

    var body: some View {
        VStack {
            ForEach(0..<3) { i in
                Spacer().frame(height: 0)
                BugReproElement(index: i)
                Spacer().frame(height: 0)
            }.frame(width: UIScreen.main.bounds.width * CGFloat(length))

            Slider(value: self.$length, in: 0.0...1.0)
        }
    }
}

答案 2 :(得分:2)

我必须先添加.fixedSize(horizontal: false, vertical: true) AND .padding(),然后我的所有文本都将被截断(正确显示),我也有一个单独的vstack的框架标签视图中有2个独立的vstack)

答案 3 :(得分:0)

Text("Some Text")
    .lineLimit(1)
    .fixedSize()

将始终显示在完全显示的 1 行中。