ナビゲーションバーの戻るボタンのフォントを変更するにはどうすればよいですか。
戻るボタンは、「戻る」または前のView Controllerのタイトルです。
このviewDidLoad
は機能すると思いました。
navigationController?.navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FONTNAME", size: 20)!], forState: UIControlState.Normal)
しかし leftBarButton?
オプションはnil
を返します。
コードをテストしたところ、行がnil
を返しているのは、実際にはname: "FONTNAME"
はnilを返します。そのため、そのname
属性を有効なフォント名に設定すると、navigationController?.navigationItem.leftBarButtonItem
は明示的にnilに設定されます。
しかし、私がテストで見たように、この行はあなたが明らかに望む結果を与えません。先頭のnavigationController
オプションは、現在のビューではなくUINavigationController
にアクセスするため、そこにあるべきではありません。 UIViewController
の独自のnavigationItem
プロパティを使用して、そのleftBarButtonItem
に直接アクセスします(例:
let backButton = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.Plain, target: self, action: "goBack")
navigationItem.leftBarButtonItem = backButton
navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Chalkduster", size: 20)!], forState: UIControlState.Normal)
編集:この回答の下で投稿したコメントから、実際にはleftBarButtonItem
を設定したくないが、backBarButtonItem
は設定しないため、前のView Controllerに戻るだけでなく、カスタムアクションを実装したい。
そのため、以前のView Controller(つまり、カスタムの戻るボタン項目を表示する前のビュー)では、次のようなアクションなしでカスタムの戻るボタンを設定できます。
let backButton = UIBarButtonItem(title: "< Back", style: UIBarButtonItemStyle.Plain, target: self, action: nil)
backButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Chalkduster", size: 20)!], forState: UIControlState.Normal)
navigationItem.backBarButtonItem = backButton
アプリ全体でフォントスタイル全体を変更する必要がある場合(別名、各ナビゲーションボタン)、推奨される方法はUIBarButtonItem.appearance()
プロキシを使用することです。
サンプルコードスニペットは次のようになります。
Swift 3.0 +
_//make sure font name u use below *actually* exists in the system !
//if it doesn't app will crash because we're force unwrapping an optional (see below) !!!
let customFont = UIFont(name: "customFontName", size: 17.0)!
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], for: .normal)
_
アプリを起動するたびにフォントのスタイル設定を行う必要があるため、このコードスニペットを_AppDelegate.Swift
_ファイルの先頭のどこかに置くのが賢明です。また、このコードを他の場所(例:Presenter
クラス)に置いて、UIのスタイル設定とカスタマイズを行っても安全です。このコードが実行されるとすぐに、その後すべてのBarButtonsがカスタマイズされます。
[〜#〜] but [〜#〜]true Swift ????)必要に応じて、フォントのラップを解除し、見つからない場合やフォントの読み込み中にその他の問題が発生した場合は、最終的にシステムフォントにフォールバックします。
_var textAttributes: [String:Any]
//custom font setup
let fontColor = UIColor.purple
let barItemCustomFont = UIFont(name: "????", size: 14) //note we're not forcing anything here
//can we use our custom font ????
if let customFont = barItemCustomFont {
//hooray we can use our font ????
textAttributes = [NSForegroundColorAttributeName: fontColor, NSFontAttributeName: customFont]
} else {
//???? not found -> omit setting font name and proceed with system font
textAttributes = [NSForegroundColorAttributeName: fontColor]
}
//finally
UIBarButtonItem.appearance().setTitleTextAttributes(textAttributes, for: .normal)
_
実際のアプリでは、通常、UINavigationBar
とUIBarButton
の両方のフォントスタイル(他のパラメーターを除く)をカスタマイズして、視覚的に一貫性を保つ必要があります。使用できる便利な_stylizeNavigationFontOfMyAmazingApp????
_関数を次に示します。
_func stylizeNavigationFontOfMyAmazingApp????() {
//custom font
let customFont = UIFont(name: "someFancyFont", size: 16)! //note we're force unwrapping here
//navigation bar coloring:
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor.blue
//unique text style:
var fontAttributes: [String: Any]
fontAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: customFont]
//navigation bar & navigation buttons font style:
UINavigationBar.appearance().titleTextAttributes = fontAttributes
UIBarButtonItem.appearance().setTitleTextAttributes(fontAttributes, for: .normal)
_
}
appearance()
プロキシを使用する利点UIBarButtonItem
をスタイル設定するための2つのライナーコードスニペット。appearance()
プロキシを組み合わせて、真にユニークな視覚スタイルを得ることができますUIBarButtonItem
の特定のインスタンスで、各ボタンをさらにカスタマイズし直すことができます(カスタムビュー、ボタン、画像などを配置するなど)。Apple Docsappearance
プロトコルで。
この変更をすべてのアプリケーションに適用する場合は、以下のコードを使用できます。
Swift 4
application
関数のAppDelegate.Swift
にこれらの行を追加しました:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().titleTextAttributes = [
NSAttributedStringKey.font: UIFont(name: "IranSansMobile", size: 20)!
]
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "IranSansMobile", size: 15)!], for: UIControlState.normal)
return true
}
Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "IranSansMobile", size: 20)!
]
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "IranSansMobile", size: 15)!], for: UIControlState.normal)
return true
}
スイフト3
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Open Sans", size: 15)!,NSForegroundColorAttributeName: UIColor.white]
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Open Sans", size: 15)!], for: UIControlState.normal)
既にUIBarButtonItem
を設定していることが確かな場合、次のことができます:
self.navigationItem.leftBarButtonItem!.title = "myTitle"
変更するには次のことができる色:
self.navigationItem.leftBarButtonItem!.tintColor = UIColor.redColor()
ストーリーボードで設定していない場合は、次のことができます。
self.navigationItem.leftBarButtonItem = UIBarButtonItem()
フォントを変更するには、次の手順を実行します。
self.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "FONTNAME", size: 20)!], forState: .Normal)
おそらくself .navigationController
を使用してはならないことに言及する必要があります。これは、navigationControllerのボタンを設定するときに、画面上に表示されず、画面上にありストーリーボードに設定されたボタンself.navigationItem
...