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)
}
}
答案 0 :(得分:1)
您可能会得到以下答案的帮助:https://stackoverflow.com/a/56604599/30602
摘要是,在其他Builder中,您需要向Text()中添加.fixedSize(horizontal: false, vertical: true)
才能使其包装。
答案 1 :(得分:0)
您无需使用NavigationButton
来实现导航。您可以轻松使用NavigationLink
来实现它,而无需将视图包装在NavigationButton
中。
检查this ANSWER,这说明了NavigationLink
的用法,而没有在其中包装视图。希望对您有所帮助。
附注-我的信誉度不足,无法将其添加为评论。谢谢