2017-08-09 15 views
0

viewControllerのビューの座標系でnavigationItemのtitleViewのフレームを取得するにはどうすればよいですか?ナビゲーション項目のタイトルviewcontrollerビューで表示

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には明らかにオフセット(戻るボタン用のスペース)があるため、これは正しくありません。

翻訳されたタイトルビューの原点を正しく抽出するにはどうすればよいですか?

答えて

0

まず、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  //<<<--- 
} 
+0

それがnilではありません。私は起源を得ている、それはviewcontrollerのビューに関してはちょうど間違っている – meowmeowmeow

+0

偉大な - ちょうど確かめることを試みる。 navigationItem.titleViewが適切に初期化されていれば、その時点でvcがサブビューを適切に配置しているので、viewDidAppearの次元が見つかります。 – caxix

関連する問題