[翻译]SwiftUI 中的 PageTabViewStyle

4,242 阅读2分钟

SwiftUI 中的 PageTabViewStyle

Photo by Charles Deluvio on Unsplash.

在最近的 WWDC 2020 大会上,苹果为“TabView”新增了名为“PageTabViewStyle”的样式,类似于水平分页滚动效果,常被用于引导页。

“一种实现了 TabView 分页的 TabViewStyle。” — 苹果官方文档

预备知识

学习本教程前,你需要掌握以下基础知识:

  • Swift
  • Xcode 12+

注意:仅支持 iOS 14+

PageTabViewStyle 入门

我们来快速实现一个 TabView,底部显示不同图标,选中时填充图片或未选中时不填充。

你需要一个 state 来判断是否选中:

@State private var selected = 0

默认的选中态是 0,你可以在设置中更改它:

TabView() {
    Text("First Tab").tabItem {
        Image(systemName: (selected == 0 ? "house.fill" : "house"))
        Text("Home")
    }
    Text("Second Tab").tabItem {
        Image(systemName: (selected == 1 ? "plus.circle.fill" : "plus.circle"))
        Text("Add")
    }
    Text("Third Tab").tabItem {
        Image(systemName: (selected == 2 ? "heart.fill" : "heart"))
        Text("Favorite")
    }
    Text("Fourth Tab").tabItem {
        Image(systemName: (selected == 3 ? "person.fill" : "person"))
        Text("Profile")
    }
}

做完这些之后,你只需要一个简单的 modifier,就可以实现水平滚动页面。在 TabView 后面添加 .tabViewStyle(PageTabViewStyle())

TabView() {
..
..
}.tabViewStyle(PageTabViewStyle())

你的 tab 页面现在可以滚动了。

你还需要一个页面指示器(page indicator)。实际上它已经在那里了,只是颜色和背景色一样是白色的,所以看不见它。

有多种方法解决这个问题,你可以换一个背景色,也可以改变页面指示器的参数。

把背景设置为绿色,可以看到页面指示器,它显示了 tab 对应的图片。

你也可以改用默认的页面指示器。只需注释掉 tab 的图标(image)。

如果你还是想用白色背景色,可以给 TabView 再添加一个 modifier:

.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))

有了 SwiftUI,实现水平滚动视图变得如此简单。这绝对值得庆祝。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏