Adding unlimited lines in a Text (SwiftUI)

2020-02-07 02:27发布

问题:

Just figuring out how I can achieve multiple lines of text in a Text. It seems like the Text has the same default as UILabel (one line), but I can't find any function which meets this criteria.

struct ContentView : View {
    var body: some View {
        VStack(alignment: .leading, spacing: 10) {
            HStack {
                Text("Avocado Toast").font(.system(size: 24))
            }
            // This Text does cut, and I wonder how I can achieve multiple rows
            Text("Ingredients: Avocado, Almond Butter, Bread")
                .font(.system(size: 20))

        }
    }
}

Edit

.lineLimit(X), did the trick. But is it possible to not set a specific amount, for instance. With just a 0?

回答1:

Use .lineLimit() to limit the amount of lines of text. It takes an optional Int (Int?) as an argument, and .lineLimit(nil) allows unlimited lines.

Edit: As of SwiftUI Beta 5, Text has a default line limit of nil, so text in Text will wrap by default.



回答2:

For wrapping Text in a Form .lineLimit(Int.max) did not work for me. It seems there needs to be some width for it to know when to wrap. I believe the official way is with .fixedSize:

Text(message)
    .fixedSize(horizontal: false, vertical: true)

The documentation states:

This example shows the effect of fixedSize(horizontal:vertical:) on a text view that is wider than its parent, preserving the ideal, untruncated width of the text view.



回答3:

My text kept truncating even with no line limit applied. Wrapping my content in a ScrollView {} solved it.

See more info here: https://www.hackingwithswift.com/quick-start/swiftui/how-to-add-horizontal-and-vertical-scrolling-using-scrollview



回答4:

Use this:

Text("Ingredients: Avocado, Almond Butter, Bread")
    .lineLimit(nil)

If that doesn't work, use this method:

Text("Ingredients: Avocado, Almond Butter, Bread")
    .fixedSize(horizontal: false, vertical: true)


回答5:

If lineLimit(nil) is not working for you, try setting layoutPriority manually to whatever it suits you .layoutPriority(0.5)