1

我正在尝试使用 UIAppearance 来配置我的应用程序的样式。它与 UIView 或 UIButton 等 UI 组件完美配合,但不适用于 UIViewControllers。我想做类似的事情:

let appearance = FirstViewController.appearance()

有没有办法将 UIAppearance 与 ViewControllers 一起使用?

4

3 回答 3

3

您没有在 a 中设置背景颜色,viewController而是在viewControllers view. 如果您使用UIView.appearance().backgroundColor,您将更改所有视图的背景。

因此,您的问题的答案是否定的,您不能使用它UIAppearance来更改viewControllers背景颜色。

您可以执行以下操作:

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red
    }
}

然后使用 Storyboard 中的检查器更改UIViewControllerFirstViewController.

于 2017-09-08T13:53:48.173 回答
3

正如您在协议的文档中看到的那样UIAppearance,默认情况下只有两个类采用它,UIView并且UIBarItem,因此UIViewController该类没有任何appearance()功能。

您可以UIViewController通过实现协议所需的方法进行扩展,或者更简单的解决方案可能是创建您自己的UIViewController子类,它为 classes 属性提供默认颜色,view.backgroundColor并使您的所有 ViewControllers 从此类继承而不是UIViewController直接继承。

于 2017-09-08T13:57:31.397 回答
0

正如之前的答案所指出的,没有办法通过协议来改变UIViewController根视图的背景。UIAppearance但是有一些方法可以实现相同的结果,而无需让UIViewController所有其他的根子类继承,或者在每个'sViewControllers中设置颜色(两种方法都有其缺点)UIViewControllerviewDidLoad()

相反,您可以创建一个 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)
[....]

截屏

截屏

于 2019-03-22T14:37:34.463 回答