小编eRe*_*Inc的帖子

SwiftUI 导航栏和状态栏 - 使它们的颜色相同

我有一个新的应用程序,理想情况下,它的顶部会有一个深蓝色的导航栏,向上延伸到状态栏的后面。使这个不透明和正确的蓝色颜色很痛苦,但我终于想出了如何通过将以下内容放在包含 NavigationView 的视图的 init() 中来使其工作:

init() {
    UINavigationBar.appearance().barTintColor = UIColor(named: "primaryBlue")
    UINavigationBar.appearance().backgroundColor = UIColor(named: "primaryBlue")
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().isOpaque = true
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个如下所示的导航栏。它是蓝色的,但状态栏仍然是白色带黑色文本(我希望它是带白色文本的深蓝色)。

在此处输入图片说明

接下来,我知道我必须使状态栏的文本“轻内容”,并从 Idiqual here找到了一个很好的解决方案,但这只是改变了栏的颜色“主题”,似乎没有一种使用此方法更改背景颜色的方法。实施后,我现在有一个状态栏,可以在深色背景上显示浅色文本,但我无法弄清楚如何让 NavigationView 的深蓝色背景扩展到状态栏的顶部。所以我剩下的是这个:

在此处输入图片说明

我尝试了几件事,例如将 .edgesIgnoringSafeArea(.top) 添加到几个不同的地方,包括 NavigationView 的右括号以及我在父视图中的 TabView,但没有任何效果。我错过了一些简单的东西吗?如何将 NavigationBar 的颜色扩展到屏幕顶部?这是我的导航视图的代码。此结构称为“FetchFrontPageArticles”:

var body: some View {
    NavigationView {
        VStack {
            List(self.fetcher.articles) { article in
                ...
            }.navigationBarTitle("", displayMode: .inline)
            .navigationBarItems(
                leading: Text(""),
                trailing: NavProfile()
            )
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

“FetchFrontPageArticles”是从此处显示的父 TabView 加载的:

TabView(selection: $selection){
        FetchFrontPageArticles()
            .tabItem {
                VStack {
                    Image("house")
                    Text("Home")
                }
            }
            .tag(0)
        Text("Second View") …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swiftui xcode11

7
推荐指数
2
解决办法
6428
查看次数

iOS 13 SearchController 后退按钮颜色

我的应用程序中有一个奇怪的视觉错误,它仅适用于从 Xcode 11 版本运行的 iOS 13。我有一个嵌入在导航控制器中的表格视图,默认色调颜色设置为我的应用程序的主要橙色。在 iOS12 上,当您取消搜索操作时,您会看到一个后退按钮,该按钮遵循主要橙色的全局导航控制器色调。这是预期的行为。如下图所示:iOS12中的橙色后箭头

但是,同样的代码在iOS13中产生了一个系统默认的蓝色后退箭头,如下图:

在此处输入图片说明

我已经尝试了一切来尝试覆盖那个蓝色的后退按钮,包括使用自定义操作创建一个自定义的 Bar Button Item,但这太混乱了,我只想简单地覆盖色调颜色。我已经尝试了很明显的searchController.searchBar.tintColor = UIColor(named:"Primary")searchController 是我的 UISearchController,并且我试图覆盖 self.navigationController 色调颜色。我试过本机访问 SearchBar,如下所示:UISearchBar.appearance().tintColor = UIColor(named:"Primary"),但仍然没有运气。我已经在 IB 中尝试了我能想到的所有其他方法,但我无法弄清楚如何达到这个后退按钮的色调。有人可以帮忙吗?

xcode swift swift5 ios13 xcode11

6
推荐指数
1
解决办法
1261
查看次数

在 SwiftUI 中以编程方式检测 Tab Bar 或 TabView 高度

我有一个 SwiftUI 应用程序,它将有一个浮动的播客播放器,类似于位于选项卡栏上方的 Apple Music 播放器,并在播放器运行时保留在所有选项卡和视图中。我还没有想出一个很好的方法来定位播放器,使其与标签栏齐平,因为标签栏的高度会根据设备而变化。我发现的主要问题是我必须如何将播放器放置在应用程序根视图中的叠加层或 ZStack 中,而不是在 TabView 本身中。由于我们无法自定义 TabView 布局的视图层次结构,因此无法在 TabBar 本身与其上方视图的内容之间注入视图。我的基本代码结构:

TabView(selection: $appState.selectedTab){
  Home()
  .tabItem {
    VStack {
        Image(systemName: "house")
        Text("Home")
    }
  }
  ...
}.overlay(
  VStack {
    if(audioPlayer.isShowing) {
      Spacer()
      PlayerContainerView(player: audioPlayer.player)
      .padding(.bottom, 58)
      .transition(.moveAndFade)
    }
  })
Run Code Online (Sandbox Code Playgroud)

这里的主要问题是 PlayerContainerView 的位置是硬编码的,填充为 58,以便清除 TabView。如果我可以检测到 TabView 的实际帧高度,我可以为给定的设备全局调整它,我会没事的。有人知道如何可靠地做到这一点吗?或者您知道我如何将 PlayerContainerView 放置在 TabView 本身中,以便在切换显示时它只会出现在 Home() 视图和 Tab Bar 之间?对于任何反馈,我们都表示感谢。

xcode swift ios13 swiftui xcode11

5
推荐指数
3
解决办法
7264
查看次数

标签 统计

swift ×3

xcode ×3

xcode11 ×3

ios13 ×2

swiftui ×2

ios ×1

swift5 ×1