我正在尝试使用UIAppearance来配置我的应用程序的样式。它与UIView或UIButton等UI组件完美配合,但不能与UIViewControllers配合使用。我想做一些类似的事情:
let appearance = FirstViewController.appearance()有没有办法在ViewControllers中使用UIAppearance?
发布于 2017-09-08 21:53:48
不是在viewController中设置背景颜色,而是在viewControllers view上设置背景颜色。如果你使用UIView.appearance().backgroundColor,你会改变所有视图的背景。
所以你的问题的答案是否定的,你不能使用UIAppearance来改变viewControllers的背景颜色。
您可以执行以下操作:
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}然后使用故事板中的检查器将UIViewController更改为FirstViewController。
发布于 2017-09-08 21:57:31
正如您在UIAppearance协议的documentation中看到的,默认情况下只有UIView和UIBarItem两个类采用它,因此UIViewController类没有appearance()函数。
您可以通过实现协议所需的方法来扩展UIViewController,或者可能更简单的解决方案是创建您自己的UIViewController子类,它为类view.backgroundColor属性提供默认颜色,并使您的所有ViewControllers继承此类,而不是直接继承UIViewController。
发布于 2019-03-22 22:37:34
正如前面的回答所指出的,没有办法通过UIAppearance协议改变UIViewController的根视图背景,但是有一些方法可以实现相同的结果,而不需要让所有其他UIViewController继承一个根ViewControllers子类,或者在每个UIViewController的viewDidLoad()中设置颜色(这两种方法都有各自的缺点)。
相反,您可以创建UIView子类
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
}
}在情节提要中,将ViewController的根视图类设置为这个UIView子类

同样的方法也适用于UITableViewController
class BackgroundTableView: UITableView {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
[....]


https://stackoverflow.com/questions/46118012
复制相似问题