HeadlessTabView

一个极简的 SwiftUI 库,提供了一个简单的 TabView 替代方案,无需强制性的标签栏,也避免了使用条件渲染带来的潜在问题。

概述

此项目的诞生源于需要在满足以下标准的视图之间进行条件切换的需求:

  1. 保留条件视图的内部状态,以实现应用程序内的“多任务处理”
  2. 干净利落地将条件视图从视图层次结构中分离出来,触发诸如 .onAppear.onDisappear 之类的外观通知
  3. 允许使用自定义(或隐藏)的选项卡切换方法
解决方案 持久化状态 外观通知 无额外负担
使用 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