导航项按钮未显示

Posted

技术标签:

【中文标题】导航项按钮未显示【英文标题】:navigationItem button not showing 【发布时间】:2019-01-10 10:08:45 【问题描述】:

我有一个UINavigationItem 我正在尝试显示一个UIBarButtonItem

现在的问题是我正确添加了它们,它们可以正常工作并且 100% 正常工作。

但它们没有显示在 UINavigationBar 上。

现在对于流程,我正在执行以下操作。

1- 我隐藏了后退按钮,像这样

self.navigationItem.setHidesBackButton(isBackHidden, animated: false)

2- 当用户点击UIButton 时,我在运行时使用函数动态添加这两个按钮。

let rightBarItem = UIBarButtonItem(title: "Button.Done".localized, style: .plain, target: self, action: #selector(self.saveButtonTapped))
navigationItem.rightBarButtonItem = rightBarItem     
let leftBarItem = UIBarButtonItem(title: "Button.Cancel".localized, style: .plain, target: self, action: #selector(self.cancelButtonTapped))
navigationItem.rightBarButtonItem?.tintColor = .red // still nothing    
navigationItem.leftBarButtonItem = leftBarItem

3- 我尝试使用这些功能,结果仍然相同

self.navigationItem.setLeftBarButton(UIBarButtonItem?, animated: Bool)
self.navigationItem.setRightBarButton(UIBarButtonItem?, animated: Bool)

总结

我尝试更改tintColor,因为它们在功能上正常工作,我认为这是颜色问题。

我尝试在DispatchQueue.main.async 中使用它们,认为这可能是线程问题,因为它是动态的。

我已经调试并检查了UINavigationItem 中的项目并且它们存在。

主要是怎么回事:

这些按钮未显示,但在UINavigationItem 上点击它们的位置时它们可以正常工作。

【问题讨论】:

那么,您正试图在运行时根据特定事件添加一个“左”栏按钮项,对吗? 是的,左右,@AhmadF 我尝试了您的第二个代码 sn-p,它对我来说效果很好...您认为是否有任何额外的信息可以提一下? @AhmadF 他们在点击 navItem 时工作,但他们没有显示.. .... bde amoslk,它有效.. 你能把它贴出来并解释原因和问题所在 【参考方案1】:

现在的问题是我正确添加了它们,它们可以正常工作并且 工作 100%。

但它们没有显示在 UINavigationBar 上。

根据您提到的,这只是一个 UI 问题-未知原因-。

因此,要确认导航项中是否显示按钮项,您可以做的是让条形按钮项具有 自定义 视图。添加UIButton 作为UIBarButtonItem 的自定义视图将是有效的,如下所示:

// right
let rightButton = UIButton(type: .custom)
rightButton.setTitle("Button.Done".localized, for: .normal)
rightButton.addTarget(self, action: #selector(saveButtonTapped), for: .touchUpInside)
let rightBarButtonItem = UIBarButtonItem(customView: rightButton)
navigationItem.setRightBarButton(rightBarButtonItem, animated: true)

// left
let leftButton = UIButton(type: .custom)
leftButton.setTitle("Button.Cancel".localized, for: .normal)
leftButton.addTarget(self, action: #selector(cancelButtonTapped), for: .touchUpInside)
let leftBarButtonItem = UIBarButtonItem(customView: leftButton)
navigationItem.setLeftBarButton(leftBarButtonItem, animated: true)

因此,对于任何需要的 UI 更新,您可以编辑 rightButtonleftButton,例如:

leftButton.layer.backgroundColor = UIColor.red.cgColor
leftButton.layer.borderWidth = 2.0
leftButton.layer.borderColor = UIColor.black.cgColor

另外,我认为不需要调用:

self.navigationItem.setHidesBackButton(isBackHidden, animated: false)

设置左栏按钮项时,默认应该是后退按钮的替代品。

【讨论】:

以上是关于导航项按钮未显示的主要内容,如果未能解决你的问题,请参考以下文章

导航项未添加

隐藏/显示片段中的导航元素

条形按钮项目未显示

引导导航栏列表项/链接未显示

iOS 11 上未显示导航栏标题和导航按钮

分段按钮未显示在 iPhone 的导航栏上