SwiftUI hidesBottomBarWhenPushed 等效吗?

2023-12-04

我试图隐藏我的TabView当我在我的视图中推送一个新视图时NavigationView但目前看来没有办法做到这一点(我在互联网上看到了很多东西,但似乎没有什么适合我)?


默认情况下,我的代码如下所示:

struct ContentView: View {
    var body: some View {
        TabView {
            NavigationView {
                view1
            }
            .tabItem {
                Image(systemName: "house.fill")
                Text("Home")
            }
            
            NavigationView {
                view2
            }
            .tabItem {
                Image(systemName: "bookmark.circle.fill")
                Text("Bookmark")
            }
        }
        .accentColor(.red)
    }
    
    private var view1: some View {
        List {
            NavigationLink {
                DetailsView()
            } label: {
                Text("View 1")
            }
        }
        .navigationTitle("View 1")
    }
    
    private var view2: some View {
        List {
            NavigationLink {
                DetailsView()
            } label: {
                Text("View 2")
            }
        }
        .navigationTitle("View 2")
    }
}

struct DetailsView: View {
    var body: some View {
        EmptyView()
    }
}

但是,我没有任何办法来隐藏我的TabView,所以我在我的ContentView:

var body: some View {
    NavigationView {
        TabView {
            view1
                .tabItem {
                    Image(systemName: "house.fill")
                    Text("Home")
                }
                .navigationTitle(Text("title"))
                
            view2
                .tabItem {
                    Image(systemName: "bookmark.circle.fill")
                    Text("Bookmark")
                }
                .navigationTitle(Text("title"))
        }
        .accentColor(.red)
    }
}

现在,隐藏推送正在工作,但它会导致导航栏中出现一些故障,并且我无法设置多个navigationTitle(每个视图一个)就像我以前所做的那样;我只能设置一个navigationTitle为了NavigationView.

为了解决NavigationView标题,我找到了一个解决方法,使用@State变量,但它在导航栏上仍然存在这个故障:有时导航视图背景正常工作,有时不工作,有时标题和内容之间有间距(例如在“书签”选项卡中):

The navigation bar glitch

我究竟做错了什么?

对于这个问题是否有任何解决方案(hidesBottomBarWhenPushed+ 导航栏故障)?


一种可能的方法是放置NavigationView and TabView in ZStack(第一个在第二个之上)并单独使用两者,使它们与选择同步。

这里唯一的挑战是计算顶视图的高度以使选项卡栏可见,一旦我们实现了这一点,选项卡栏的可见性就可以根据链接激活来打开/关闭。

使用 Xcode 14 / iOS 16 进行测试

demo

主要部分:

    ZStack {
        TabView(selection: $selection) {
            GeometryReader { gp in
                Color.clear.onAppear {
                        height = gp.size.height
                    }.onChange(of: gp.size) { _ in
                        height = gp.size.height
                    }
            }
            .tabItem {
                Image(systemName: "house.fill")
                Text("Home")
            }.tag(1)
            Color.clear
            .tabItem {
                Image(systemName: "bookmark.circle.fill")
                Text("Bookmark")
            }.tag(2)
        }
        .accentColor(.red)

        NavigationView {
            if selection == 1 {
                view1
            } else {
                view2
            }
        }
        .frame(maxHeight: tabBarVisible ? height : .infinity)
        .frame(maxHeight: .infinity, alignment: .top)
        .onChange(of: linkedTag) { tag in
            tabBarVisible = tag == nil
        }

GitHub 上的测试代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI hidesBottomBarWhenPushed 等效吗? 的相关文章

随机推荐

  • windows csv 和 mac csv 有什么区别?

    我正在尝试使用此代码解析 csv 文件 if handle fopen csvFilePath r FALSE c 0 string while data fgetcsv handle 1000 FALSE if c gt 0 if dat
  • HttpUnit 是否已弃用/不活动/不支持?

    三年前 当我探索并研究 HttpUnit 时 我很喜欢它的功能 尽管在三年没有跟踪它之后 当我向我的同事建议基于它的解决方案时 他告诉我它已被弃用 apache 状态表明它处于活动状态 我在哪里找不到这是否属实 如果这是真的 我会感到震惊
  • Mac OS 和 Windows 之间的 exp() 精度

    我在这里得到了一个代码 当我在Win和Mac OS上运行它们时 结果的精度是不同的 任何人都可以帮忙吗 const double c 1 exp 2 0 double x 139 0 5 2282 0 x 1 exp 2 1 x c 结果都
  • 如何在数据库(Mongo)中进行左连接[重复]

    这个问题在这里已经有答案了 我是蒙戈新手 请帮我如何在 Mongo 中进行左连接 SQL语句 Select from TableA left Join TableB on TableA col1 TableB col1 AND TableB
  • 我可以继承 OpenERP 中的标准报告吗?

    我想更改 OpenERP 6 1 中的采购订单报告 我是否必须进入并更改购买模块 或者我可以创建一个新模块来继承标准报告并覆盖一些详细信息 您无法完全继承另一个报告并仅覆盖一些详细信息 但您可以替换标准报告并使其所有现有链接启动您的新报告
  • 在python中创建一个列来对数值进行分类

    我有一个名为 df 的 python 数据框 其中包含客户的 BMI 作为 bmi 列中的数字 我想在数据框中添加一个新列 称为 bmi cat 它是基于其数值的 BMI 类别 即 这就是我尝试过的 但没有成功 它不喜欢使用 for df
  • 如何从学说查询生成器获取部分结果

    我有一个产品实体 其中有一个数组作为属性 ORM OneToMany targetEntity Shopious MainBundle Entity ProductPicture mappedBy product cascade persi
  • 如何动态添加多个句柄到 jQuery 滑块

    我想做这个 在某些事件上向 jQuery 滑块添加句柄 该句柄应该有一个 id 以便当它滑动时 我可以访问它的值 有什么想法如何做到这一点 Here是 JSfiddle 中的代码 其中实现了带有两个手柄的滑块 我需要做的就是通过触发某些事件
  • 在堆上创建结构体?

    我被指示通过在保存源副本的堆上创建一个 String 结构来编写模型 strdup 我想我已经成功编码了 strdup 但我不确定我是否已经创建堆上的结构体 typedef struct String int length int capa
  • 带有子网格和本地数据的 JqGrid 在 IE9 中不起作用 - 抛出 - “SCRIPT600:此操作的目标元素无效”

    我是 JQGRID 的新手 我使用的是 4 7 1 版本 我正在尝试使用 SUBGRID 创建 JQGRID 该代码在 Google Chrome 中按预期工作 但我在 IE9 中收到下面提到的错误 SCRIPT600 Invalid ta
  • 将 .RData 文件加载到会话中,但在 Shiny 中未加载任何对象

    我在 R 中得到了分析结果 一个名为obj 并将其保存为 RData 文件obj result RData 现在在闪亮 在年初ui R文件 我把load obj results RData 这样每次运行 Shiny 时 这个对象都可以加载到
  • 手动滚动两个显示相同内容的 UICollectionView

    正如标题所示 我有一个UIViewController有两个UICollectionViews它们以水平方式显示相同的内容 主图一次显示一张照片 大拇指图一次显示多张照片 我已经覆盖了UIScrollViewDelegate方法并添加了一些
  • 当 CrawlerProcess 运行两次时,Scrapy 会引发 ReactorNotRestartable

    我有一些代码看起来像这样 def run spider name settings runner CrawlerProcess settings runner crawl spider name runner start return Tr
  • 串行化套接字

    我尝试序列化套接字 但它不起作用 正确的方法是什么 public class MySocket implements Serializable private Socket socket public MySocket Socket soc
  • 使用 dir 搜索文件 - 多次命中

    我有一个宏 它遍历文件夹并使用 dir 函数来查找活动文件夹中是否存在文件 并将文件名放入单元格中 问题是可能有两个或多个文件满足搜索 Dir subfolder Kommunesvar 如果有两个以 Kommunesvar 开头的文件 如
  • 为什么我的 li 元素之间有空格? [复制]

    这个问题在这里已经有答案了 我有一个水平显示的项目列表 我想在每个里周围创建一个边框 并使它们彼此相邻地突出 我创建了一个小测试来说明问题 在这里看到 ul class dashboard inline links li a href Oc
  • 复杂的数据库操作

    我为我的 ASP NET 应用程序绘制了一个非常简单的数据库设计 在一些帮助下 我成功地实现了我的设计 但我想将数据插入到该表中并从中检索 我的应用程序中一个非常重要的功能将需要某个记录的所有 7 个表中的所有信息 有时我需要让我的应用程序
  • HttpClient GetAsync 未按预期工作

    当使用 Postman 测试我的 Web API 时 我的 API 执行得很好 当涉及到运行代码时HttpClient在我的客户端应用程序中 代码执行时没有错误 但在服务器上没有预期的结果 可能会发生什么 从我的客户端应用程序 privat
  • 传递 SqlConnection

    我创建了一个 TransactionScope 并在该范围内在数据库中创建和更新了各种项目 在此过程中 我对数据库进行了大量调用 最初 我在 TransactionScope 的开头打开了一个 SqlConnection 并将其传递给任何进
  • SwiftUI hidesBottomBarWhenPushed 等效吗?

    我试图隐藏我的TabView当我在我的视图中推送一个新视图时NavigationView但目前看来没有办法做到这一点 我在互联网上看到了很多东西 但似乎没有什么适合我 默认情况下 我的代码如下所示 struct ContentView Vi