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
旁边是否有任何navigationItem
s,以便我可以将宽度设置为动态?而不是像屏幕截图那样重叠?
这是我的测试用例的更多屏幕截图
注意:是的,我知道如何使用代码 someCustomView.frame = CGRect(.....)
设置框架,而且 UINavigationBar/Item 似乎继承自 NSObject 而不是 UIView
编辑:显然在进行了大量编码、重新编码和研究之后,UINavigationBar
/UINavigationItem
的唯一部分会根据左右自动调整自身大小/strong> barButtons
是 titleView
在某种程度上很烂。
所以据我所知,实现这一目标的唯一方法是:
是通过使用 UINavigationItem
的 titleView
属性,它不能回答我的问题。
【问题讨论】:
【参考方案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
并为自己添加一个看起来像 navigationBar
的 customView
,但我不想偏离框架。以上是关于UINavigationItem barButtonItem customView 检测其他项目然后设置宽度的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationItem.titleView 能否成为FirstResponder?