【发布时间】:2017-09-16 15:22:18
【问题描述】:
我有故事板设置,所有视图控制器扩展导航控制器,类 NavigationController: UINavigationController, UIViewControllerTransitioningDelegate 自定义导航栏设置导航控制器类 CustomNavigationBar:UINavigationBar 这是 NavigationController 的代码
class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
}
这是CustomNavigationBar的代码
class CustomNavigationBar: UINavigationBar {
override func awakeFromNib() {
var font = UIFont(name: "Montserrat-Light", size: 17)!
if "ar" == userLocale() {
font = UIFont(name: "DroidSansArabic", size: 17)!
}
let attribtutes = [
NSFontAttributeName: font,
NSForegroundColorAttributeName: UIColor.black,
NSKernAttributeName: 5.0
] as [String : Any]
UINavigationBar.appearance().titleTextAttributes = attribtutes
UINavigationBar.appearance().tintColor = UIColor.black
UINavigationBar.appearance().backgroundColor = UIColor.white
let image = UIImage(named: "back-btn")
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -66), for: .default)
UINavigationBar.appearance().backIndicatorImage = image
}
}
到目前为止一切顺利,我现在想添加一个带有自定义视图的右栏导航项。我尝试在NavigationController::viewDidLoad()中添加以下代码
let customView:UIView = UIView()
customView.backgroundColor = .green
customView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
let item = UIBarButtonItem(customView: customView)
self.navigationItem.setRightBarButton(item, animated: false)
由于某种原因,它没有显示在导航菜单中。我哪里错了?
【问题讨论】:
-
您需要在基本视图控制器中添加
self.navigationItem.setRightBarButton(item, animated: false)部分,因为每个视图控制器都有自己的导航项,这就是您的自定义按钮不显示的原因 -
如您所见,我已在 NavigationController 中添加了该内容。我还需要在所有其他 ViewController 中添加它吗?
-
如果您使用 baseViewController 并将此实现添加到他的 viewDidLoad 中,并且您将所有其他 viewController 子类化为您的 baseViewController 您只需添加一次
-
我尝试将它添加到一个视图控制器中,它确实有效。我现在希望它适用于所有带有导航菜单的视图控制器。
-
明白了,说得通。
标签: swift swift3 uinavigationcontroller uinavigationbar