swiftUI 类似头条多标题联动的查看效果 可滚动切换且带有动画效果 完整代码
时间: 2024-10-08 17:03:13 浏览: 34
在SwiftUI中,实现类似今日头条的多标题联动查看效果,我们可以使用`ScrollView`、`List`以及`NavigationLink`来完成。下面是一个简化的示例,展示了如何滚动切换标题,并带有轻量级动画:
首先,在你的项目中导入`@StateObject`和`@State`,因为我们需要存储滚动位置和标题状态:
```swift
import SwiftUI
class TitleViewContent: ObservableObject {
@Published var currentIndex = 0
let titles = ["标题1", "标题2", "标题3", "标题4", "标题5"]
}
```
然后在`ContentView`中使用`ScrollView`包裹`List`,并将`TitleViewContent`作为数据源:
```swift
struct ContentView: View {
@ObservedObject private var viewModel = TitleViewContent()
var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(minimumWidth: .auto, alignment: .center), GridItem(minimumWidth: .fill)]) {
ForEach(viewModel.titles.indices, id: \.self) { index in
NavigationLink(destination: DetailView(title: viewModel.titles[index])) {
HStack {
Text(viewModel.titles[index])
.font(.largeTitle)
Spacer()
Image(systemName: index == viewModel.currentIndex ? "chevron.right" : "chevron.left")
.foregroundColor(index == viewModel.currentIndex ? .white : .gray.opacity(0.7))
.onTapGesture {
viewModel.currentIndex = index
}
}
.animation(.spring())
.frame(width: 200, height: 60)
.background(index == viewModel.currentIndex ? Color.gray.opacity(0.1) : Color.clear)
.cornerRadius(10)
}
}
}
}
.navigationBarTitle("标题切换")
}
}
struct DetailView: View {
let title: String
...
}
```
`DetailView`是你需要为每个标题详情准备的视图。
在上面的代码中,我们用`LazyVGrid`来优化布局性能,`NavigationLink`负责跳转到详情页。点击箭头图标时,会更新`currentIndex`,触发`List`滚动到对应标题的位置。`animation(.spring())`提供了一个平滑的滚动动画效果。
注意,这只是一个基本的示例,实际应用中可能还需要考虑更多的细节,比如动画效果、加载更多等。
阅读全文