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

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

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

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

Q&A

解決済

1回答

1637閲覧

ナビゲーションコントローラーの戻るボタンをカスタマイズしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2022/10/27 07:55

前提

ナビゲーションコントローラーの戻るボタンイベントを取得するコードを実装しています。
従来の方法でカスタマイズしていたところ一部 iO15では非推奨 と表示されます。

実現したいこと

iOS15、iOS14共に戻るボタンを以下の構成でコード生成すること。
⚫︎戻る(テキスト)
⚫︎"chevron.backward(画像)

イメージ説明

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

'imageEdgeInsets' was deprecated in iOS 15.0: This property is ignored when using UIButtonConfiguration

該当のソースコード

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3... 4if #available(iOS 15.0, *) { 5 navigationItem.leftBarButtonItem = UIBarButtonItem(image:UIImage(systemName: "chevron.backward")!, style: UIBarButtonItem.Style.plain, target: self, action:#selector(self.back)) 6 } else { 7 let button = UIButton(type: .system) 8 button.addTarget(self, action: #selector(back(_:)), for: .touchUpInside) 9 button.setTitle("Back", for: .normal) 10 button.setImage(UIImage(systemName: "chevron.backward"), for: .normal) 11 button.titleLabel?.font = UIFont.systemFont(ofSize: 16) 12 button.imageEdgeInsets = .init(top: 0, left: -8, bottom: 0, right: 0) 13 navigationItem.leftBarButtonItem = .init(customView: button) 14 } 15... 16}

試したこと

戻るボタンに画像を設定することは出来たのですがタイトル(戻る)を入れることが出来ません。

タイトルも追加できる方法が知りたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://stackoverflow.com/questions/68328038/imageedgeinsets-was-deprecated-in-ios-15-0
の回答で説明されているように、iOS15からUIButtonにはconfigurationというのが指定できるようになっていて、imageEdgeInsetsに対応するものはconfiguration.contentInsetsになると思います。

swift

1if #available(iOS 15.0, *) { 2 var configuration = UIButton.Configuration.plain() 3 configuration.title = "Back" 4 configuration.image = UIImage(systemName: "chevron.backward") 5 configuration.imagePadding = 4 6 configuration.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: -8, bottom: 0, trailing: 0) 7 let button = UIButton(configuration: configuration) 8 navigationItem.leftBarButtonItem = .init(customView: button) 9}

ただ、iOS14でも動作させる予定があるなら、プロジェクトのターゲットiOSバージョンをiOS14に設定すれば、今の imageEdgeInsets を使用するコードでも警告は出なくなるはずです。

投稿2022/10/29 03:10

TakeOne

総合スコア6299

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

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

退会済みユーザー

退会済みユーザー

2022/10/29 06:55

回答ありがとうございます。 戻るボタンにイベントを付与したかったので if #available(iOS 15.0, *) { ... let button = UIButton(configuration: configuration) button.addTarget(self, action: #selector(back(_:)), for: .touchUpInside) // ボタンアクションを追加 navigationItem.leftBarButtonItem = .init(customView: button) } としました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問