我的问题在技术上与此SO的重复:How do I set custom navigation bar(title + titleView) for all navigation controllers and view controller?
上面链接中的基类答案是我当前的解决方案,我将在下面解释。这个解决方案的一个问题是它使我的公司徽标图像titleView消失并重新出现每一个segue,我希望通过所有导航过渡保持徽标可见。
我在UINavigationBar
的中心使用公司徽标。目前,对于UINavigationViewController
的任何子项UIView,我通过CTRL拖动到我的Swift UINavigationItem
在Xcode 7 Storyboard中添加ChildViewController
出口并始终使用相同的ID:
@IBOutlet weak var uiNavItemTitle: UINavigationItem!
然后我删除了上面Xcode生成的行,因为我MyBaseViewController
继承了ChildViewController
中的相同行。现在,我可以在MyBaseViewController
中设置徽标一次,并且每个ChildViewController
都继承自MyBaseViewController
,此代码位于MyBaseViewController
:
@IBOutlet weak var uiNavItemTitle: UINavigationItem!
override func viewDidLoad() {
super.viewDidLoad()
// MARK: - UINavigationController Defaults
uiNavItemTitle.titleView = CoreUtility.LogoForUINavBarGet()
self.navigationController?.navigationBar.topItem?.title = "";
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
}
这个解决方案的问题在于,对于我的UINavigationViewController segue堆栈中的每个ChildViewController,我必须添加UINavigationItem
出口并确保继承MyBaseViewController
。我在导航链中更深层次的一些导航segue视图不应该真正继承此MyBaseViewController
。
我的解决方案的另一个问题是公司徽标消失,并在一秒钟之后重新出现每个segue到新的UIViewController
我可以为继承层次创建另一个级别是一种可能的解决方案。
但是我的UINavigationItem.titleView对于每个孩子UIViewController都是相同的公司徽标。
我是否必须为每个UIViewController添加UINavigationItem?
或者在我的AppDeletgate.application()
:
//MARK: - UINavigationBar.appearance
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.somethingForTitleView
somethingForTitleView
成为将应用程序范围的导航栏titleView设置为我的徽标视图的代码。