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

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

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

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

Q&A

解決済

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

faipaspijfasjf
faipaspijfasjf

総合スコア260

Swift

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

1回答

0グッド

0クリップ

232閲覧

投稿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}

試したこと

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

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

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

総合スコア6210

faipaspijfasjf😄を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

faipaspijfasjf

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) } としました。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Swift

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