首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

更改状态栏颜色SwiftUI no UIHosting

在 SwiftUI 中更改状态栏颜色,您可以使用 UINavigationBarAppearance 来修改导航栏的颜色,因为 SwiftUI 默认不支持直接更改状态栏颜色

  1. 首先,确保您的项目已经导入了 UIKitSwiftUI
  2. SceneDelegate.swift 文件中,找到 scene(_:willConnectTo:options:) 方法。如果您的项目中没有这个文件,请创建它。
  3. scene(_:willConnectTo:options:) 方法中,设置 windowrootViewController 为一个自定义的 UIViewControllerRepresentable 类,这个类将用于设置状态栏颜色。

例如:

代码语言:javascript
复制
import SwiftUI
import UIKit

class ViewController: UIViewController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent // 设置状态栏颜色为浅色
    }
}

struct ViewController_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

struct AppDelegate_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

@main
struct YourApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct HostingController: UIViewControllerRepresentable {
    func makeUIViewController(context: UIViewControllerRepresentableContext<HostingController>) -> ViewController {
        return ViewController()
    }

    func updateUIViewController(_ uiViewController: ViewController, context: UIViewControllerRepresentableContext<HostingController>) {
    }
}

// 在 SceneDelegate 中设置 window.rootViewController 为 HostingController
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    let contentView = ContentView()
    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = HostingController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

这段代码将创建一个自定义的 UIViewController,它的 preferredStatusBarStyle 属性设置为 .lightContent,这将使状态栏颜色变为浅色。然后,将此自定义 UIViewController 设置为 windowrootViewController

请注意,此方法可能会导致其他 SwiftUI 视图无法正确显示状态栏颜色。要解决这个问题,您可以在每个需要的视图上使用 .preferredColorScheme() 修饰符:

代码语言:javascript
复制
struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
            .preferredColorScheme(.light) // 设置视图的颜色方案
    }
}

这样,当视图显示在屏幕上时,状态栏的颜色将根据当前视图的颜色方案进行更改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android系统更改状态栏字体颜色

随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。...我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上面的文字就无法看清了。...因此本文提供一些解决方案,可以是MIUI6+,Flyme4+,Android6.0+支持切换状态栏的文字颜色为暗色。...Android6.0+ Android 6.0开始,谷歌官方提供了支持,在style属性中配置android:windowLightStatusBar 即可, 设置为true时,当statusbar的背景颜色为淡色时...,statusbar的文字颜色会变成灰色,为false时同理。

2.4K60

Android状态栏颜色修改

前言 Android 4.4(API 19)之后,就提供了修改状态栏颜色的方法,但是在 Android 6.0(API 23)之后,才支持修改状态栏上面的文字和图标颜色,默认是白色的。...所以会导致一个问题,在 4.4 到 6.0 之间的系统,状态栏设置为浅色的话,状态栏上面白色的文字和图标会看不清 有一些第三方的系统提供了设置状态栏和状态栏文字、图标颜色的方法,比如小米的MIUI和魅族的...Flyme,所以考虑了下比较好的实现方式是: Android 4.4 以上使用 SystemBarTint 修改状态栏颜色; Android 6.0 以上使用系统方法修改状态栏字体、图标颜色; Android...当然,这里面也会有坑,比如 MIUI 提供的修改状态栏字体颜色方法会跟 Android 系统自带的方法冲突,官方说明如下: 关于MIUI状态栏字符颜色逻辑调整说明 经过网上的资料和自己的尝试,MIUI...基于上面的思考,封装了设置 Android 4.4 以上系统状态栏颜色和状态栏字体、图标颜色的方法: 首先,需要引入 SystemBarTint 库: dependencies { implementation

4.1K30
  • android自定义状态栏颜色

    我们知道IOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?...若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!...win.setAttributes(winParams);        }   需注意的是, tintManager.setStatusBarTintResource(R.color.top_bg_color);这一步的颜色值...(即把你的状态栏颜色与你的标题栏颜色保持一致)要写在color.xml中去,如果用Color.praseColor则会报错。...状态栏高度算法: /**            * 状态栏高度算法            * @param activity            * @return            *

    1.8K60

    两步设置状态栏字体颜色

    https://blog.csdn.net/u010105969/article/details/48297207 之前写过设置状态栏字体颜色的方法即第二种方法,最近又学习一种一步搞定的方法即第一种方法...第一种方法:(如果在NavigationController中需做些设置,后文会提到) // 设置状态栏的颜色为白色 - (UIStatusBarStyle)preferredStatusBarStyle...returnUIStatusBarStyleLightContent; } 第二种方法: 第一步在plist文件中添加View controller–based status bar appearance 为NO 第二步://设置状态栏字体颜色...= UIBarStyleBlack; 如果此时导航栏上的颜色不是我们所想要的我们可以利用下面的方法设置导航栏的颜色: // 设置导航栏的颜色为黑色     [self.navigationController.navigationBarsetBarTintColor...补充"中修改状态栏颜色的代码并不能改变状态栏的颜色,要想在NavigationController改变状态栏的颜色需要重写NavigationController的preferredStatusBarStyle

    1.8K10

    iconfont Symbol svg引入无法更改颜色

    按照以前我使用font-face的方式,设计只需要传一套,我这边改颜色,既然很多大佬(比如:张鑫旭)都说SVG Sprites比font-face高几层楼,那肯定也支持颜色更改吧。...这不我就刷到了张大佬的svg图标更改颜色,讲得通俗易懂,十分全面。 外部交涉 我试了所有方式,都没成功。好家伙,时间紧,任务重。也就不想纠结原因了,然后就想着找设计要两套吧。...上次font-face不能改颜色,好像是图底色问题。这次不会? 问题排查 找一个图标库 既然别个都行,你不行。我就怀疑是不是腾讯的图标库不得行,阿里的可以。...对比两个图标的path 原因 所以还是svg生成的时候设置了fill属性,导致无法更改颜色。修改方法,需要设计那边上传单色图标。

    3.7K30

    如何更改 Ubuntu 的终端的颜色

    更改你的 Ubuntu 的终端的颜色 这些步骤类似于 如何更改终端的字体和大小。你必须找到自定义颜色的选项,就是这样的简单。...image.png 如你在上面的屏幕截图中能够注意到的那样,你可以选择使用一些内置的颜色方案,也可以 通过更改文本和背景的默认颜色选项 来完成自定义颜色方案。...更改终端的颜色的其它的方法 这里有其它的几种更改 Ubuntu 的终端的颜色的方法: 更改主题 大多数的 Ubuntu 主题都有它们自己的终端的颜色的实现,并且其中的一些实现看起来非常漂亮。...这里是如何针对 Ant 和 Orchis 主题进行更改终端的颜色方案: image.png 你可以选择一种黑暗主题,接下来你的主题将会变成黑色。不需要担心选择颜色方案的问题。...依据你的壁纸选择终端颜色 如果你不想手动自定义你的终端的颜色,你可以使用 Pywal 。使用这个方便的 Python 工具,你的计算机能够随着你的每一张壁纸来 更改你的终端的颜色方案 。

    14.4K10

    Palette状态栏颜色提取,写的不错就分享了

    他是这么干的: /**  * 界面颜色的更改  */ @SuppressLint("NewApi")   private void colorChange(int position) {...vibrant.getRgb());               mPagerSlidingTabStrip.setTextColor(vibrant.getTitleTextColor());   // 其中状态栏...blue = (int) Math.floor(blue * (1 - 0.1));   return Color.rgb(red, green, blue);   }   /**  * 界面颜色的更改...vibrant.getRgb());               mPagerSlidingTabStrip.setTextColor(vibrant.getTitleTextColor());   // 其中状态栏...上面的颜色处理:像如果有把Toolbar当成了ActionBar来使用而且有一些明显的ActionBar即视感的ActionButton的话,我觉得状态栏的颜色应该比ToolBar颜色深一点比较好,看起来有一点界限分隔

    90860

    更改Linux终端颜色主题【Linux-Command line】

    设定 大多数流行的软件终端应用程序,包括GNOME,KDE和Xfce,都带有更改其颜色主题的选项。 调整主题就像调整应用程序首选项一样容易。...在新的配置文件中,单击“颜色”选项卡。 屏幕快照 2019-11-24 下午4.40.52.png 在“颜色”选项卡中,取消选择“从系统主题使用颜色”选项,以便其余窗口变为活动状态。...终端以LS_COLORS环境变量的形式使用这些颜色,以将颜色添加到ls命令的输出中。 如果它们对你不具有吸引力,请在此屏幕上进行更改。 当你对主题感到满意时,请关闭“Preferences”窗口。...要将终端更改为新的配置文件,请单击“应用程序”菜单,然后选择“配置文件”。 选择新的个人资料并享受你的自定义主题。...你能够且应该进行一些细微但有意义的更改,以使你的数字home更加舒适。 终端就是最好的开始!

    9K00
    领券