使用UIAppearance和切换主题
我正在寻找主题我的iOS应用程序,并已阅读UIAppearance。 我希望用户能够在应用程序内切换许多不同的视觉主题。 然后,UI中将显示更改主题。
我想我可以在appDelegate.m中加载一个单独的主题文件。 但在那之后,我有点坚持如何实现这一点?
在视图添加到视图层次结构后,UIKit从UIAppearance代理设置属性。
在UISS我使用这样的方法:
- (void)reloadAppearance { NSArray * windows = [UIApplication sharedApplication].windows; for (UIWindow *window in windows) { for (UIView *view in window.subviews) { [view removeFromSuperview]; [window addSubview:view]; } } }
另一个技巧是从主窗口中删除rootViewController并再次添加。 虽然我更喜欢第一种解决方案,因为它涵盖了更广泛的案例。
这适用于Swift:
let windows = UIApplication.sharedApplication().windows for window in windows { for view in window.subviews { view.removeFromSuperview() window.addSubview(view) } }
罗伯特建议的解决方案对我不起作用。 我正在使用iOS9和UITabbarController。 这个建议是唯一有效的答案
它基本上解释了这个问题,当我们使用UIAppearance时,它基本上是应用的,并且在重新绘制视图之前不会改变,特别是对于像UITabbarControllers这样的rootViewController,新的颜色只会在应用程序从内存中删除后生效并再次打开,如果你想立即改变,你将不得不手工制作并设置每个属性,如附件中的答案中所述
迅捷4:
let windows = UIApplication.shared.windows for window in windows { for view in window.subviews { view.removeFromSuperview() window.addSubview(view) } }
- 用UIBezierPath单行绘制字母(文本)
- iOS:找出小数位数
- SWIFT – 领域dbencryption不起作用
- 如何使用datepicker在button上显示选定的date?
- UIScrollView子视图中的水平UISwipeGestureRecognizer? (UIScrollView只需要识别垂直滚动)
- info.plist中的CFBundleShortVersionString必须高于1.0
- 如何比较目标C中的两个NSDate对象
- 在Quartz2D中使用UIImage或UILabel或NSString是否有任何性能或内存开销?
- Xamarin Forms App在iOS上以发布模式崩溃,但在调试模式下工作