【SWIFT】UINavigationControllerのPush遷移にて、遷移先のUINavigatonControllerのカスタムビューレイアウトがUINavigationBarを考慮できない

前提

メインコントローラー:UITabBarController
遷移元Controller:UIViewControllerA
遷移先Controller:UIViewControllerB
遷移先ViewControllerのカスタムビュー:CustomView

以上の構成より
下記の順序で画面遷移が行われております。

Swift

///UITabBarController let firstViewController = UIViewControllerA let UINavigationController_0 = UINavigationController(rootViewController: firstViewController) UINavigationController_0.modalPresentationStyle = .fullScreen UINavigationController_0.tabBarItem = UITabBarItem(title: "tab1", image: .none, tag: 0)

Swift

///UIViewControllerA let UIVIEWCONTROLLERB = UIViewControllerB() self.navigationController?.pushViewController(TARGETPROFILEVIEWCONTROLLER, animated: true)

実現したいこと

上記の画面遷移後
UIViewControllerB()ではカスタムビューとして自前で用意しているビューを設定しております。

Swift

///UIViewControllerB let CUSTOMVIEW = CustomView() override func viewDidLayoutSubviews() { self.view = CUSTOMVIEW }

CUSTOMVIEW内ではコードレイアウトを行なっているのですが、一つ目のオブジェクトの基準となる
TopAnchorを設定する際、自身のTopAnchorと同じ値にした場合、NavigationControllerにViewが重なってしまいうまくレイアウトが行えませんでした(自身のViewのTopAncherは画面のTopAnchorなので上記のself.view = CUSTOMVIEWではNavigationControllerを考慮しない。当たり前ですが、、、)

Swift

///CustomView() ///これではカスタムビューに重なってしまう object.topAnchor.constraint(equalTo: self.topAnchor).isActive = true

このようなことからなんとかカスタムビュー内でUInavigationControllerのナビゲーションバーのBottomの値を取得したいのですがどうしてもうまくいきません。
MVCモデルの採用を行なっているためにUINavigationController内でなるべくレイアウトの設定は行いたくないというのがありますのでUIVIEW内で完結できる方法がありましたらご教授いただけますと幸いです。

試したこと

■CustomViewのイニシャライズでnavigationBarのAnchorの値を渡す
⇨こちらカスタムビュー内のoverride init内でSuper.initにて継承基のframe初期化を行っていることの影響で
Designatedイニシャライザ及びConvenienceイニシャライザの実装ができませんでした

■CustomViewインスタンス後にプロパティオブザーバを実装し、navigationBarのAnchorの値をUIViewControllerBから渡したらレイアウトの処理が行われるようにする
⇨こちらは階層が異なるNavigationBarの値を使用することは禁止されているようで値が入ったプロパティをレイアウト時に使用する段階でエラーが発生してしまいました

■UIViewControllerBのビュー設定で、CustomViewのFrameを計算(UIViewControllerBにいるのでNavigationBarの値が取れる)してからAddSubViewを行い、設定する
⇨こちらはAddsubViewにした場合UITabBarControllerのタブが表示されてしまう

どうにかスマートに行う方法はありませんでしょうか。
そもそも、UINavigationControllerでPush遷移した先のViewがカスタムビューという状況はいくらでもあると思うのですがネットで調べてもStoryBoardで実装しているものばかりでコードレイアウトを行なっているものがなく、解決には至りませんでした。

試したことの三つ目にあるFrame計算の方法にて表示されているタブを非表示にする処理をUIViewControllerBにて行う手もあるのですがそもそもの画面領域が狭まってしまう(タブ領域を使用できない)というのがありますのでなるべく使いたくはありません。
どなたかご回答いただけますでしょうか。お願いいたします。

コメントを投稿

0 コメント