Ios 更改UIAppearence后刷新选项卡栏

Ios 更改UIAppearence后刷新选项卡栏,ios,ios5,uiappearance,Ios,Ios5,Uiappearance,我有一个想法,我想尝试实施: 基本上,我希望能够轻松区分登录和未登录我的应用程序。我的想法是,当用户未登录时,应用程序将在UIAppearence代理中设置背景色等。登录后,这些值将通过更改UIAppearence设置进行更改 我发现这种方法是可行的,但并不是所有的UI元素在更改UIAppearence后都会被刷新。最突出的例子是我的UITabBarController中的选项卡栏,它是我的窗口的rootViewController 在寻找这个问题的解决方案时,我发现了一些建议,即需要调用lay

我有一个想法,我想尝试实施:

基本上,我希望能够轻松区分登录和未登录我的应用程序。我的想法是,当用户未登录时,应用程序将在UIAppearence代理中设置背景色等。登录后,这些值将通过更改UIAppearence设置进行更改

我发现这种方法是可行的,但并不是所有的UI元素在更改UIAppearence后都会被刷新。最突出的例子是我的UITabBarController中的选项卡栏,它是我的窗口的rootViewController

在寻找这个问题的解决方案时,我发现了一些建议,即需要调用layoutSubviews或drawRect,以便视图刷新并采用对UIAppearence的更改。但是,在我的应用程序委派中,我尝试了以下所有操作,但均未成功:

[self.window.rootViewController.view setNeedsLayout]
[self.window.rootViewController.view setNeedsDisplay]

[self.tabbarController.tabBar setNeedsLayout]
[self.tabbarController.tabBar setNeedsDisplay]

[self.tabbarController.view setNeedsLayout]
[self.tabbarController.view setNeedsDisplay]

有人知道我如何强制重新绘制选项卡栏和其他视图吗?我想我只是想在UIView层次结构中一直向LayoutSubview发送调用,但如果是这样的话,我还没有找到这样做的方法。

我已经使用KVO通知我的自定义UIAbbar

我的伎俩是:

创建uitabar子类 将其链接到XIB/故事板上的UITabBarController 在项目创建覆盖上添加观察者-voidsetItems:NSArray*项目动画:BOOLanimate 手柄观察者
我已使用KVO通知我的自定义UITabBar

我的伎俩是:

创建uitabar子类 将其链接到XIB/故事板上的UITabBarController 在项目创建覆盖上添加观察者-voidsetItems:NSArray*项目动画:BOOLanimate 手柄观察者
UIAppearance属性是在视图添加到视图层次结构后设置的。
再次触发它的最简单技巧是分离关键点窗口的rootViewController,然后再次附加它。您还可以删除关键窗口的子视图,然后再次添加它们。

ui将视图添加到视图层次结构后,将设置外观属性。
再次触发它的最简单技巧是分离关键点窗口的rootViewController,然后再次附加它。您还可以删除key window的子视图并再次添加它们。

下面是一个片段,我用它在更改内部主题后刷新应用程序的UI外观

NSArray *windows = [UIApplication sharedApplication].windows;
for (UIWindow *window in windows) {
    for (UIView *view in window.subviews) {
        [view removeFromSuperview];
        [window addSubview:view];
    }
}

希望它能满足您的需要,对我来说它是完美的。

这里有一个片段,我用它在更改内部主题后刷新应用程序的UI外观

NSArray *windows = [UIApplication sharedApplication].windows;
for (UIWindow *window in windows) {
    for (UIView *view in window.subviews) {
        [view removeFromSuperview];
        [window addSubview:view];
    }
}

希望它能满足你的需要,对我来说它是完美的。

你很久没有问过这个问题了。 当我尝试应用黑暗模式13时,我也遇到了同样的问题

UITabbar已使用“外观API”进行了修改,模式已更改,但未更改任何内容。我必须强制更改文本颜色和字体

我的解决办法如下

在UIViewController的子类上实现“traitCollectionDidChange”API。 迭代UITabbar的项 setTitleAttributes具有UITabbariItem的“setTitleTextAttributes”
谢谢。

你很久没有问过这个问题了。 当我尝试应用黑暗模式13时,我也遇到了同样的问题

UITabbar已使用“外观API”进行了修改,模式已更改,但未更改任何内容。我必须强制更改文本颜色和字体

我的解决办法如下

在UIViewController的子类上实现“traitCollectionDidChange”API。 迭代UITabbar的项 setTitleAttributes具有UITabbariItem的“setTitleTextAttributes”
谢谢。

谢谢你的回答。我正在寻找一些特定的UIE外观,但是。谢谢你的回答。不过,我正在寻找一些特定于UI外观的东西。嗨,大卫,我试过了,但对我无效。嗨,大卫,我试过了,但对我无效。我遇到了同样的问题。我将项目的选定图像设置为暗模式。当我在“设置”中切换模式时。它不会改变。所以我认为这应该是iOS 13.0中的一个bug。我遇到了同样的问题。我将项目的选定图像设置为暗模式。当我在“设置”中切换模式时。它不会改变。所以我认为这应该是iOS 13.0中的一个bug。