来自AppDelegate的自定义UINavigationBar

时间:2018-01-21 18:32:45

标签: ios swift uinavigationbar navigationbar uiapplicationdelegate

我制作了一个自定义的UINavigationBar,我想在全球范围内使用它。我在其他示例中看到,要在全局设置UINavigationBar外观,您必须在AppDelegate中执行类似此let navigationBar = UINavigationBar.appearance()的操作。然后,您可以设置属性。就我而言,我在class var中设置了所有属性,如下所示:

extension UINavigationBar {
    class var customNavBar : UINavigationBar{
        let navigationBar = UINavigationBar()
        navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir-Black", size: 40)!, NSForegroundColorAttributeName: UIColor.RED]

        //gets rid of black separation bar
        navigationBar.shadowImage = UIImage()
        navigationBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)

        //set the background color to white
        navigationBar.tintColor = UIColor.white
        navigationBar.isTranslucent = false
        return navigationBar
    }
}

现在,我如何将AppDelegate中的UINavigationBar设置为固有的这些属性。我的意思是在app委托中有这样的东西。或者类似的当然。 在AppDelegate中:

let navigationBar  = UINavigationBar.customNavBar.appearance()

我之所以这样做是因为我有一些其他的UIViewControllers(不能从我的TabViewController中删除),我想手动添加一个UINavigationBar,它必须看起来就像是自定义的。

2 个答案:

答案 0 :(得分:1)

如果要将导航栏自定义到该程度,最好不要创建子类。问题是您需要手动将类名传递给需要使用它的任何导航控制器。如果需要,您可以对UIToolbar执行相同操作,或者通过nil使用默认值。

class MyNavigationBar: UINavigationBar {
    override init(frame: CGRect) {
        super.init(frame: frame)
        // configure your nav bar here
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

let navController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: nil)

供参考:https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621866-init

答案 1 :(得分:0)

我的代码错了 在swift中你应该使用

NavController = UINavigationController.init(navigationBarClass: yoursubClass, toolbarClass: AnyClass?)

然后

if let window = self.window{
        window.rootViewController = NavController
 }

reference