我正在尝试使用 UIAppearance 来配置我的应用程序的样式。它与 UIView 或 UIButton 等 UI 组件完美配合,但不适用于 UIViewControllers。我想做类似的事情:
let appearance = FirstViewController.appearance()
有没有办法将 UIAppearance 与 ViewControllers 一起使用?
我正在尝试使用 UIAppearance 来配置我的应用程序的样式。它与 UIView 或 UIButton 等 UI 组件完美配合,但不适用于 UIViewControllers。我想做类似的事情:
let appearance = FirstViewController.appearance()
有没有办法将 UIAppearance 与 ViewControllers 一起使用?
您没有在 a 中设置背景颜色,viewController
而是在viewControllers
view
. 如果您使用UIView.appearance().backgroundColor
,您将更改所有视图的背景。
因此,您的问题的答案是否定的,您不能使用它UIAppearance
来更改viewControllers
背景颜色。
您可以执行以下操作:
class FirstViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}
然后使用 Storyboard 中的检查器更改UIViewController
为FirstViewController
.
正如您在协议的文档中看到的那样UIAppearance
,默认情况下只有两个类采用它,UIView
并且UIBarItem
,因此UIViewController
该类没有任何appearance()
功能。
您可以UIViewController
通过实现协议所需的方法进行扩展,或者更简单的解决方案可能是创建您自己的UIViewController
子类,它为 classes 属性提供默认颜色,view.backgroundColor
并使您的所有 ViewControllers 从此类继承而不是UIViewController
直接继承。
正如之前的答案所指出的,没有办法通过协议来改变UIViewController
根视图的背景。UIAppearance
但是有一些方法可以实现相同的结果,而无需让UIViewController
所有其他的根子类继承,或者在每个'sViewControllers
中设置颜色(两种方法都有其缺点)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)
[....]