質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

558閲覧

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

QRGPS

総合スコア0

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2023/01/30 06:17

前提

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をの写真を貼っておきます。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/01/30 06:25

navigationBar をいじることによる弊害が大きそう。将来の iOS バージョンでは動かなくなるとか…。
QRGPS

2023/01/30 06:32

確かに、、、🥺🥺🥺 自分の考えたもう一つの案だと、親viewのnavigationBarも含めた画面のuiimageを取得して、背景に貼り付けるとかになるんですけど、これもまた同じ話になりますよね、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問