如何在SwiftUI导航按钮中自动换行?

时间:2019-06-27 14:44:14

标签: swiftui

SwiftUI的Text类型具有一个修饰符,如果文本太长而无法在其容器中水平放置,则允许文本换行。要实现文本换行,只需将nil作为参数传递给lineLimit修饰符:

Text("This text is too long to fit horizontally within its non-NavigationButton container. Therefore, it should wrap to fit, and it does.")
    .font(.body)
    .lineLimit(nil)

除了在SwiftUI NavigationButton内部使用时,上述操作均按预期工作。我嵌套在Text实例中的所有NavigationButton实例都不包装:

NavigationButton(destination: DestinationView()) {
    Text("This text is too long to fit horizontally within its NavigationButton container. Therefore, it should wrap to fit, but it does not.")
        .font(.body)
        .lineLimit(nil)
}

上面的代码中是否缺少我可以将Text实例包装在NavigationButton实例中的内容?

编辑以添加更多上下文:

初始视图是一个List,包裹在NavigationView中。 List包含MeasurableItemsListItem的实例,这些实例包装在NavigationButton实例中,这些实例触发导航到添加到导航堆栈的辅助视图:

struct MeasurableItemsList : View {

    private let measurableItems = MeasurableItem.allCases

    var body: some View {
        NavigationView {
            List(measurableItems.identified(by: \.self)) { measurableItem in
                NavigationButton(destination: DosableFormsList(measurableItem: measurableItem)) {
                    MeasurableItemsListItem(measurableItem: measurableItem)
                }
            }
        }
    }
}

包裹在NavigationButton中的每个列表项均由以下结构组成:

struct MeasurableItemsListItem : View {

    let measurableItem: MeasurableItem

    var body: some View {
        Text(measurableItem.name)
            .font(.body)
            .foregroundColor(.primary)
            .lineLimit(nil)
    }

}

2 个答案:

答案 0 :(得分:1)

您可能会得到以下答案的帮助:https://stackoverflow.com/a/56604599/30602

摘要是,在其他Builder中,您需要向Text()中添加.fixedSize(horizontal: false, vertical: true)才能使其包装。

答案 1 :(得分:0)

您无需使用NavigationButton来实现导航。您可以轻松使用NavigationLink来实现它,而无需将视图包装在NavigationButton中。 检查this ANSWER,这说明了NavigationLink的用法,而没有在其中包装视图。希望对您有所帮助。 附注-我的信誉度不足,无法将其添加为评论。谢谢