swiftでheader(navigationBar)に制約を設定する方法

前提

swift で画面遷移した際に遷移元親viewがtransformで縮んで背景になる処理を作っています。

実現したいこと

画面遷移した際に親viewが背景として透過される様にしてtransformで少し小さくして、ハンバーガーメニューを開いたようなイメージにしたくて、header(navigationBar)も同じ様にtransformで小さくしたいです。

発生している問題・エラーメッセージ

親view.viewの方はうまくいったのですが、headerの方が思う様に縮まりません、navigationBarの方にもtransformを適用して、小さくするところまではうまくいったのですが、、なぜか画面の右側にくっついてしまいます。ですのでAnchorで真ん中に来るように調節しようとしたところ、Anchorが効きませんでした。
そもそもnavigationBarに制約を適用するということ自体がマイナーで、調べても出てきませんでした。制約の付け方、またそれを画面に反映させる方法などがありましたら、ぜひご教授頂きたいです。お願いします。

該当のソースコード

class modal: UIViewController{

var superView = Main() // 親Viewです override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // superViewにAnchorをつけて反映するメソッド superViewSet() //遷移先画面を小さくするメソッド(headerが見えやすいようにしただけです。あまり気にしないで下さい) folderListViewSet() // 遷移した瞬間にanimationでtransformを実行 AppearAnimation() } func superViewSet(){ //superViewにAnchorをつけて反映するメソッド // 以下4行は固定の制約ども superView.navigationController?.navigationBar.translatesAutoresizingMaskIntoConstraints = false // 制約の有効化 // こちらが問題の反映されないAnchorです。 // superView(親viewの).navigationBarとsuperView(親viewの).viewとのAnchorを設定しています。 superView.navigationController?.navigationBar.topAnchor.constraint(equalTo: superView.view.topAnchor, constant: 0).isActive = true superView.navigationController?.navigationBar.leftAnchor.constraint(equalTo: superView.view.leftAnchor, constant: 0).isActive = true superView.view.layoutIfNeeded() // superView内の「true」にした制約を画面に反映 } // headerが見えやすいように遷移先の画面を小さくしただけです。あまり気にしないで下さい func folderListViewSet(){ // 遷移先viewをtransformで小さくているだけです folderListView.transform = CGAffineTransformMakeScale(0.7, 0.7); } func AppearAnimation(){ // 遷移した瞬間にtransformを実行するメソッド // メソッド内で発生する画面の変化に経過時間を設定できる。 UIView.animate(withDuration: 0.3) { self.superView.navigationController?.navigationBar.transform = CGAffineTransformMakeScale(0.8, 0.8); } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

transform後のnavigationBarをの写真を貼っておきます。
イメージ説明

コメントを投稿

0 コメント