LinkCardsCompositionalView 是一个基于 UICollectionViewCompositionalLayout 与 SwiftUI 混合实现的横向分页吸附(snap-scrolling)卡片列表组件。它采用 UIKit 的 Compositional Layout 来管理卡片布局,并使用 UIHostingConfiguration 将 SwiftUI 的卡片视图嵌入到 UICollectionViewCell 中,实现了类似 App Store 推荐栏的流畅滑动体验。
- 横向分页吸附滚动:卡片宽度设为屏幕宽度的 80%,开启
orthogonalScrollingBehavior = .groupPaging,实现分页吸附。 - SwiftUI 卡片:通过
HighlightSquareView自定义卡片外观,支持圆角、背景色和文本。 - Diffable Data Source:使用
UICollectionViewDiffableDataSource动态管理数据,方便增删改。 - 无缝集成 SwiftUI:借助
UIHostingConfiguration,在 UIKit 里直接展示 SwiftUI 视图。
- iOS 14.0+
- Xcode 14.0+
- Swift 5.5+
-
将
AppsCompositionalView.swift拖入你的 Xcode 项目。 -
在
Info.plist中确保支持 SwiftUI 与 UIKit 混编。 -
在合适的位置导入并使用:
import SwiftUI struct ContentView: View { let items = (1...10).map { LinkCardItem(title: "Card \($0)") } var body: some View { AppsCompositionalView(items: items) .edgesIgnoringSafeArea(.all) } }
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
let sample = (1...10).map { LinkCardItem(title: "Card \($0)") }
AppsCompositionalView(items: sample)
}
}
}- 调整卡片尺寸:在
createLayout()中修改groupSize的宽高比例或绝对值。 - 修改间距:修改
group.interItemSpacing或section.contentInsets。 - 更换卡片样式:编辑
HighlightSquareView,替换背景、文字、交互等。
MIT © 2025 Ao XU