如何在 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() 以使其换行。
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() 以使其换行。