如何使用UIAppearance

时间:2017-09-08 13:47:17

标签: ios swift uiviewcontroller uiappearance uibackgroundcolor

我正在尝试使用UIAppearance来配置我的应用程序的样式。它与UI组件(如UIView或UIButton)完美配合,但不适用于UIViewControllers。我想做点什么:

let appearance = FirstViewController.appearance()

有没有办法在ViewControllers中使用UIAppearance?

3 个答案:

答案 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中所看到的,默认情况下只有两个类采用它,UIViewUIBarItem,因此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子类 screenshot

同样的方法适用于ViewController

UITableViewController

screenshot

screenshot