UINavigationItem barButtonItem customView 检测其他项目然后设置宽度

Posted

技术标签:

【中文标题】UINavigationItem barButtonItem customView 检测其他项目然后设置宽度【英文标题】:UINavigationItem barButtonItem customView detecting other items then setting width 【发布时间】:2016-12-07 09:15:36 【问题描述】:

这是我的导航栏

现在我知道如何使用此代码在leftBarButtonItem 上添加customView

navigationItem.leftBarButtonItem!.customView = someCustomView

如我的截图所示

但问题是,有没有办法可以检测到我的leftBarButtonItem 旁边是否有任何navigationItems,以便我可以将宽度设置为动态?而不是像屏幕截图那样重叠?

这是我的测试用例的更多屏幕截图

注意:是的,我知道如何使用代码 someCustomView.frame = CGRect(.....) 设置框架,而且 UINavigationBar/Item 似乎继承自 NSObject 而不是 UIView

编辑:显然在进行了大量编码、重新编码和研究之后,UINavigationBar/UINavigationItem 的唯一部分会根据左右自动调整自身大小/strong> barButtonstitleView 在某种程度上很烂。

所以据我所知,实现这一目标的唯一方法是:

是通过使用 UINavigationItemtitleView 属性,它不能回答我的问题。

【问题讨论】:

【参考方案1】:

如果-希望-这些是正在寻找的输出:

那么你应该设置navigationItem的titleView:

当导航栏的中心显示一个自定义视图 接收器是最重要的。

动态处理宽度不重叠。

例如,在下面的代码sn-p中,我将navigationItem.titleView的值设置为UILabel(当然你也可以自定义):

override func viewDidLoad() 
    super.viewDidLoad()

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
    label.text = "Some very long text that should be in the middle of the navigation bar"
    label.textAlignment = .center
    label.textColor = UIColor.blue

    navigationItem.titleView = label

输出应该类似于上面的屏幕截图。

注意,截图中出现的“Item 01”“Item 02”“Item 03”是直接添加到故事板,没有与添加它们相关的代码。

如果您想让标签位于“Item 01”按钮的旁边,只需让它:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
        label.text = "my label"
        label.textAlignment = .left
        label.textColor = UIColor.blue

        navigationItem.titleView = label

输出应该是这样的:

希望这会有所帮助。

【讨论】:

是的,我也想过这个问题,但 titleViews 的问题是它是 centered 而不是 leftAligned @ZonilyJame 好吧,如果您想将其设置为 UILabel(在您的情况下应该如此),请检查我的编辑。 我也做了那个兄弟,谢谢你的努力,但我在这里寻找的是检测NavBar中的项目,然后相应地设置宽度。就像 NavigationBar Title 如何自动截断自己一样,我正在寻找一种方法来复制这种行为,在这种情况下,对于 UINavigationItem 我也可以隐藏 navigationBar 并为自己添加一个看起来像 navigationBarcustomView,但我不想偏离框架。

以上是关于UINavigationItem barButtonItem customView 检测其他项目然后设置宽度的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationItem.titleView 能否成为FirstResponder?

ChildviewController 的 UINavigationItem

如何更改 UINavigationItem 的背景颜色?

UINavigationItem 中的搜索栏

UINavigationItem 动画

UINavigationController 和 UINavigationItem 有啥区别