如何在 SwiftUI NavigationButton 中换行文本?

How Can I Wrap Text in a SwiftUI NavigationButton?

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 之外,以上内容按预期工作。我嵌套在 NavigationButton 个实例中的所有 Text 个实例不换行:

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)
    }

}

您不需要使用NavigationButton来实现导航。您可以通过使用 NavigationLink 轻松实现它,其中您不需要将视图包装在 NavigationButton 中。 检查 this ANSWER,它解释了 NavigationLink 的用法,但没有在其中包装视图。我希望它有所帮助。 P.S.- 我没有足够的声望点来添加此评论。谢谢

你可能会得到这个答案的帮助:

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