自动滚动头部菜单 - SwiftUI & Combine

特性

要求

需要定义三个必需的接口

协议 描述
IMenuItem 枚举 - 菜单类别
IListModel 结构体 - 列表项模型
IItemTpl 结构体 - 项目视图模板

1. 枚举

定义符合 IMenuItemenum。来自包 d3_menu_bar 的协议。它是菜单和列表部分标题的类别

    import d3_menu_bar

    enum MenuItems: String, IMenuItem {

        case breakfast = "Breakfast"        
        case lunch = "Lunch"        
        case dessert = "Dessert"
    }

2. 模型

定义符合 IListModelmodel

添加您需要在列表行表示中使用的字段

    struct ListModel : IListModel{
        
        let id = UUID()
        
        let category: MenuItems
        
        let title : String
    }

3. 模板

2. Model 定义符合 IItemTplview

模板的所有表示形式都取决于您。 故意将其包含在组件的 API 中,以便通过配置轻松控制列表表示形式。

    struct ItemTpl: IItemTpl {

        let item: ListModel

        var body: some View {
            VStack{
                Text(item.title)
                Divider()
            }.padding()
        }
    }

4. 创建自动滚动头部菜单

    let data: [ListModel] = //Pass array of data
    ScrollableMenuList(items: data, content: { ItemTpl(item: $0) })

可选

尺寸策略 描述
fit 分配所有可用的空间,不可滚动
auto 根据内容自动调整大小
flex(CGFloat) 设置最小宽度
样式 描述
round 圆角
square 方角

click to watch expected UI behavior for the example click to watch expected UI behavior for the example

代码示例

查看 ScrollableMenuListExample.swift 中的示例预览,或者创建一个项目,添加该包,并将 ScrollableMenuListExample() 放入 ContentView()

文档 (API)