コントローラのナビゲーションバーに戻るボタンの画像を設定しようとしています。viewDidLoad()のコードは次のとおりです。
var backImg: UIImage? = UIImage(named: "back_btn.png")
println(backImg)
if var back_img = backImg {
println("GET IT")
println(back_img)
println(UIControlState.Normal)
println(UIBarMetrics.Default)
self.navigationController.navigationBar.backItem.backBarButtonItem.setBackButtonBackgroundImage(back_img, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
}
それらをviewWillLoadに入れようとしましたが、同じエラーが発生しました
エラーメッセージのあるコンソール:
<UIImage: 0x7ff37bd85750>
GET IT
<UIImage: 0x7ff37bd85750>
VSC14UIControlState (has 1 child)
(Enum Value)
fatal error: unexpectedly found nil while unwrapping an Optional value
どこがおかしいのかわかりません。 back_imgはnilではないようですが、nilであるというエラーが表示されました
ありがとう!
私はサンプルコードを調べることで理解しました。 1)ストーリーボードにバーボタンアイテムを作成します。 2)IBOutletを使用してそのボタンをコントローラーにリンクします3)ボタンに画像を追加します
var backImg: UIImage = UIImage(named: "back_btn")
backBtn.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
PS:画像はImages.xcassetsフォルダーに追加する必要があります。詳細については、サンプルコード ICatalog を参照してください。
Swift 3.0 +appdelegate
didFinishLaunchingWithOptions
メソッドのコードの下に置くと、完全に機能します
let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)
またはSwift 4.0 +
let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)
タイトルを削除したくない場合は、最後の行でNavigation Back Button
のタイトルを削除し、最後の行を削除します
すべてのコントローラーで戻るボタンを変更したい場合は、didFinishLaunchingWithOptionsでこれをアプリデリゲートに追加できます。
let backImg: UIImage = UIImage(named: "back_button")!
UIBarButtonItem.appearance().setBackButtonBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "back-icon")
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "back-icon")
//デフォルトのナビゲーションバーの画像とアクションを使用して戻るボタンを設定するのに最適なソリューションです
最初にナビゲーションバーにUIBarButtonを追加します
次に、ストーリーボードのファイルインスペクターのプロパティに移動し、スペースを追加してボタンのタイトルテキストを元に戻します
Uiバーボタンの画像に画像を設定
/クリックアクションメソッドで書き込む/
スワイプのポップ(前のコントローラーに戻る)を有効にするには、ViewDidLoadメソッドに2行のコードを記述します
そしてアニメーションをスワイプして戻る完璧な戻るボタンを取得します
//注:-戻るボタンの前のビューコントローラのタイトルを無効にするには、ストーリーボードファイルインスペクタの戻るボタンのタイトルテキストにスペースを1つ追加します
別の方法:ストーリーボードのナビゲーションコントローラーをクリックします(UIViewController自体のナビゲーションコントローラーではありません)。次に、RHSの属性セクションに、バックイメージとバックマスクが表示されます。後ろの画像をセットすれば完了です。
Swift 4+バージョン
let backImage = UIImage(named: "back-icon").withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -80.0), for: .default)