【发布时间】:2018-11-20 22:02:21
【问题描述】:
我正在尝试在 iOS 应用上实现自定义导航标题。
故事板如下所示:
我想要自定义导航标题的地方是最后一个视图(消息视图),因为我使用图像和文本,这意味着我需要自定义宽度和高度。如果我在viewDidLoad 中这样做,就需要这个:
let rect = CGRect(x: 0, y:0, width: 150, height: 88)
titleView = UIView(frame: rect)
......
titleView?.addSubview(imageView)
......
titleView?.addSubview(label)
navigationItem.titleView = titleView
标题的高度被屏蔽到 44pt。
但我如何做到的是将子视图添加到导航栏:
var navigationBar: MessagesNavigationBar? {
guard let navigationBar = navigationController?.navigationBar as? MessagesNavigationBar else {
return nil
}
return navigationBar
}
在viewDidLoad
let rect = CGRect(x: 0, y:0, width: 150, height: 88)
titleView = UIView(frame: rect)
......
titleView?.addSubview(imageView)
......
titleView?.addSubview(label)
navigationBar?.addSubview(titleView!)
但问题是当我离开视图时我必须删除子视图,否则我添加的任何内容也会出现在表格视图中。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if navigationBar != nil {
titleView?.removeFromSuperview()
}
}
这让我觉得我做的不对,当我离开对话时,我发现很难为这些子视图添加淡出动画。 (即 iOS 上的原生消息应用)。
那么在 iOS 12 中创建自定义标题导航栏的正确方法是什么?
场景
【问题讨论】:
-
“由于需要这个,我不能在 viewDidLoad 中使用类似的东西”你为什么不能呢?这是正常且正确的做法……
-
对不起,我含糊不清,我编辑了这个问题。所以,如果我使用
navigationItem.titleView = titleView,我无法更改titleView的高度,默认为44。
标签: ios swift xcode uinavigationcontroller uinavigationbar