这是我的NavBar
现在我知道如何使用此代码在customView
上添加leftBarButtonItem
navigationItem.leftBarButtonItem!.customView = someCustomView
如我在此截图中所见
但问题是,有没有办法让我能够检测到navigationItem
旁边是否有leftBarButtonItem
,所以我可以将宽度设置为动态?而不是像屏幕截图那样重叠?
这是我测试用例的更多屏幕截图
注意:是的我知道如何使用代码someCustomView.frame = CGRect(.....)
来设置框架,似乎UINavigationBar / Item继承自NSObject而不是UIView
编辑:经过大量编码,重新编码和研究后,UINavigationBar
/ UINavigationItem
中唯一根据自动调整大小的部分左右 barButtons
是titleView
哪种方式很糟糕。
是使用titleView
的{{1}}属性来回答我的问题。
答案 0 :(得分:0)
如果-hopefully-这些是正在寻找的输出:
然后你应该设置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
输出应该是:
希望这有帮助。