WrappingHStack 是一个 UI 元素,其工作方式与 HStack 非常相似,但会自动将溢出的元素放置在下一行。
WrappingHStack {
Text("WrappingHStack")
.padding()
.font(.title)
.border(Color.black)
Text("can handle different element types")
Image(systemName: "scribble")
.font(.title)
.frame(width: 200, height: 20)
.background(Color.purple)
Text("and loop")
.bold()
WrappingHStack(1...20, id:\.self) {
Text("Item: \($0)")
.padding(3)
.background(Rectangle().stroke())
}.frame(minWidth: 250)
}
.padding()
.border(Color.black)
要求 iOS 13 及更高版本
.package(url: "https://github.com/dkk/WrappingHStack", .upToNextMajor(from: "2.0.0"))
只需将以下行添加到你的 Podfile
中
pod 'WrappingHStack'
将 WrappingHStack 包导入到你的视图中
import WrappingHStack
像使用 HStack 一样使用它来处理单个元素
WrappingHStack {
/* some views */
NewLine() // Optional: Use NewLine to force the next element to be placed in a next line
/* some more views */
}
或者像使用 ForEach 一样循环处理多个项目
WrappingHStack(1...30, id:\.self) {
Text("Item: \($0)")
}
您可以使用参数 alignment
来控制项目的位置,该参数设置项目的 HorizontalAlignment
。即,leading(前导)、trailing(尾随)或 centered(居中)。
为了更加方便和灵活,WrappingHSTack
提供了参数 spacing
,用于定义间距的计算方式。它可以是以下类型之一
.constant
:用于固定间距,每行以一个项目开始,并且任何两个项目之间的水平间隔都是给定的值。.dynamic
:使项目填充 WrappingHSTack 的宽度。您可以传递一个最小间距。.dynamicIncludingBorders
:填充整个宽度,项目之间以及项目到边框之间的间距相等。您可以传递一个最小间距。NavigationLink
中使用 WrappingHStack
时需要解决方法(仅限 iOS16)。您可以通过帮助我解决任何报告的问题或功能请求并创建 pull request 来为该项目做出贡献。
赞助此项目以获得奖励并给予我精神上的鼓励。
WrappingHStack 最初由 Daniel Klöck 开发,并根据 MIT 许可证发布。