一个极简的 SwiftUI 库,提供了一个简单的 TabView
替代方案,无需强制性的标签栏,也避免了使用条件渲染带来的潜在问题。
此项目的诞生源于需要在满足以下标准的视图之间进行条件切换的需求:
.onAppear
和 .onDisappear
之类的外观通知解决方案 | 持久化状态 | 外观通知 | 无额外负担 |
---|---|---|---|
使用 TabView |
✅ | ✅ | ❌ |
使用条件渲染 | ❌ | ✅ | ✅ |
使用 ZStack 和 .opacity 修饰符 |
✅ | ❌ | ✅ |
使用 HeadlessTabView |
✅ | ✅ | ✅ |
总而言之,这个库允许你创建真正独特的标签栏体验,而无需黑客手段或牺牲性能。
import HeadlessTabView
// Declare a `Hashable & CaseIterable` type
enum Selection: String, Hashable, CaseIterable {
case first
case second
}
struct Content: View {
@State var selection: Selection = .first
var body: some View {
HeadlessTabView($selection) { selection in
// NOTE: This @ViewBuilder block is returned in its
// entirety, meaning that if each view needs e.g. a `NavigationView`,
// it's workable to wrap the entire switch statement in one.
switch(selection) {
case .first:
// First view
case .second:
// Second view
}
}
}
}
欢迎您为 HeadlessTabView 做出贡献,更多信息请查看 LICENSE
文件。
David Ask