需要定义三个必需的接口
协议 | 描述 |
---|---|
IMenuItem | 枚举 - 菜单类别 |
IListModel | 结构体 - 列表项模型 |
IItemTpl | 结构体 - 项目视图模板 |
定义符合 IMenuItem
的 enum。来自包 d3_menu_bar 的协议。它是菜单和列表部分标题的类别
import d3_menu_bar
enum MenuItems: String, IMenuItem {
case breakfast = "Breakfast"
case lunch = "Lunch"
case dessert = "Dessert"
}
定义符合 IListModel
的 model。
添加您需要在列表行表示中使用的字段
struct ListModel : IListModel{
let id = UUID()
let category: MenuItems
let title : String
}
为 2. Model 定义符合 IItemTpl
的 view。
模板的所有表示形式都取决于您。 故意将其包含在组件的 API 中,以便通过配置轻松控制列表表示形式。
struct ItemTpl: IItemTpl {
let item: ListModel
var body: some View {
VStack{
Text(item.title)
Divider()
}.padding()
}
}
items
- 数据数组content
- 项目表示的模板 let data: [ListModel] = //Pass array of data
ScrollableMenuList(items: data, content: { ItemTpl(item: $0) })
menuBarStrategy
- 项目菜单宽度分配的默认策略是 auto尺寸策略 | 描述 |
---|---|
fit | 分配所有可用的空间,不可滚动 |
auto | 根据内容自动调整大小 |
flex(CGFloat) | 设置最小宽度 |
menuBarColor
- 默认值为 .blue
menuBarStyle
- 默认样式为 square
样式 | 描述 |
---|---|
round | 圆角 |
square | 方角 |
查看 ScrollableMenuListExample.swift 中的示例预览,或者创建一个项目,添加该包,并将 ScrollableMenuListExample() 放入 ContentView()