viewcontroller视图中的navigationitem titleView框架

时间:2017-08-09 16:19:34

标签: ios swift

如何在viewcontroller视图的坐标系中获取navigationItem的titleView的框架?

if let navBarHeight = navigationController?.navigationBar.frame.height,
   let navBarWidth = navigationController?.navigationBar.frame.width {
   myCustomTitleView.frame = CGRect(x: 0, y: 0, width: navBarWidth, height: navBarHeight)
   navigationItem.titleView = myCustomTitleView
}

但是,当我检查myCustomTitleView的帧起点时,我得到(0,0)。

然后我尝试将此原点转换为viewcontroller的视图。我得到的是(0,-44),它考虑了导航栏的高度,但不考虑x偏移。

let originInVCView = view.convert(myCustomTitleView.frame.origin, from: myCustomTitleView)

这可能不对,因为titleView显然有一个偏移(后退按钮的空间)。

如何正确提取已翻译的titleView原点?

1 个答案:

答案 0 :(得分:1)

您要确保首先在viewDidLoad()中设置导航项。否则它将是零。

override func viewDidLoad() {
  super.viewDidLoad()

  let imageView = UIImageView(image: UIImage(named: "MY_IMAGE"))
  navigationItem.titleView = imageView

完成后,您可以在VC的viewDidAppear中获取已放置视图的框架:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

     let nItemFrame = navigationItem.titleView?.frame     //<<<---
}