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

时间:2016-12-07 09:15:37

标签: ios swift xcode uinavigationitem

这是我的NavBar

enter image description here

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

navigationItem.leftBarButtonItem!.customView = someCustomView

如我在此截图中所见

enter image description here

但问题是,有没有办法让我能够检测到navigationItem旁边是否有leftBarButtonItem,所以我可以将宽度设置为动态?而不是像屏幕截图那样重叠?

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

enter image description here

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

编辑:经过大量编码,重新编码和研究后,UINavigationBar / UINavigationItem中唯一根据自动调整大小的部分左右 barButtonstitleView哪种方式很糟糕。

所以根据我的知识,实现这一目标的唯一方法是: enter image description here

是使用titleView的{​​{1}}属性来回答我的问题。

1 个答案:

答案 0 :(得分:0)

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

enter image description here

enter image description here

然后你应该设置navigationItem的titleView

  

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

它动态处理不重叠的宽度。

例如,在下面的代码片段中,我将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

输出应该是:

enter image description here

希望这有帮助。