我正在尝试使用UIAppearance来配置我的应用程序的样式。它与UI组件(如UIView或UIButton)完美配合,但不适用于UIViewControllers。我想做点什么:
let appearance = FirstViewController.appearance()
有没有办法在ViewControllers中使用UIAppearance?
答案 0 :(得分:2)
您没有在viewController
中设置背景颜色,而是在viewControllers
view
上设置背景颜色。如果您使用UIView.appearance().backgroundColor
,则会更改所有视图的背景。
因此,您的问题的答案是,您无法使用UIAppearance
更改viewControllers
背景色。
您可以做的是:
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}
然后使用故事板中的检查器将UIViewController
更改为FirstViewController
。
答案 1 :(得分:2)
正如您在UIAppearance
协议的documentation中所看到的,默认情况下只有两个类采用它,UIView
和UIBarItem
,因此UIViewController
class没有appearance()
函数。
您可以通过实现协议所需的方法来扩展UIViewController
,或者更简单的解决方案是创建自己的UIViewController
子类,它为类{{view.backgroundColor
提供默认颜色。 1}} property并使所有ViewControllers直接从此类继承而不是UIViewController
。
答案 2 :(得分:0)
如先前的答案所指出,无法通过UIViewController
协议更改UIAppearance
的根视图背景。
但是,有一些方法可以达到相同的结果,而无需让所有其他UIViewController
继承一个根ViewControllers
子类,或者在每个UIViewController
的{{1}}中设置颜色(两种方法都有其缺点)
相反,您可以创建UIView子类
viewDidLoad()
在情节提要中,将class BackgroundView: UIView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Set your background color
self.backgroundColor = .black
// Or, if your background is an image
self.layer.contents = UIImage(named: "background")!.cgImage
}
}
的根视图类设置为此UIView子类
同样的方法适用于ViewController
UITableViewController