タイトルを画像にしたり、高さや行数を変更する方法。タイトルを画像にしたり、高さや行数を変更する方法。Item(以下、ナビゲーションアイテム)に設定するタイトルをカスタマイズする方法を説明する。タイトルを画像にするまずはタイトルを画像に変更してみよう。作業開始前のXcodeプロジェクトをGitHubに置いたので、手順を試してみる人はご利用されたし。⇒「テスト用プロジェクト」ViewController.swiftを以下のコードに変更する。ナビゲーションアイテムはtitleプロパティの他にtitleViewというプロパティも持っていて、titleViewプロパティに値を設定するとそれが優先されてタイトルに表示される。//ナビゲーションアイテムのタイトルに画像を設定する。{super.viewDidLoad()//ナビゲーションアイテムのタイトルに画像を設定する。Controllerを選択する。黄緑枠のアイデンティティインスペクタボタンを押して設定画面を開き、Classに「ViewController」を設定する。これで昼、夕方の両方の画面にViewControllerクラスが使われるようになった。以下は実際のプレイ動画。タイトルに画像が表示されるようになった。カスタムクラスでタイトルを画像にする先ほどの実装の欠点は、新しいビューコントローラーを作る度にタイトルに画像を設定するコードを書かなければならない点である。単純なコードなので苦労はしないが、冗長なコードを増やさないためにもナビゲーションアイテムのタイトルを設定する箇所は1つにしておきたい。Controller(以下、ナビゲーションコントローラー)のサブクラスを作り、画面遷移時のデリゲートメソッドでタイトルに画像を設定する。先ほどのViewController.swiftの変更は元に戻しておくこと。メニューから「File」⇒「New」⇒「File...」を選択する。Class」を選択する。ofに「UINavigationController」を入力し、Nextボタンを押す。保存先を指定する画面が表示されるので、プロジェクトと同じ場所であることを確認し、Createボタンを押す。TestNavigationController.swiftを以下のコードに変更する。「画面遷移後の呼び出しメソッド」でナビゲーションバーにスタックされているナビゲーションアイテムの中の一番上のアイテムのtitleViewプロパティに画像を設定している。ナビゲーションアイテムはナビゲーションバーの中に配列で保持されていて、push、popで出し入れされながら画面遷移時に利用されるので、一番上のアイテムが画面遷移後のナビゲーションアイテムになる。//デリゲート先に自分を設定する。//ナビゲーションアイテムのタイトルに画像を設定する。{super.viewDidLoad()//デリゲート先に自分を設定する。{//ナビゲーションアイテムのタイトルに画像を設定する。"title_img.png"))}}以下は実際のプレイ動画。画面遷移が終わってから画像が現れるのが気になるところではある。ナビゲーションバーの高さを調整するナビゲーションバーの高さは画像の大きさに合わせて自動で伸縮することはないので、以下の画像のように、大きい画像をタイトルに設定すると画像がナビゲーションバーをはみ出してしまう。そこで、ナビゲーションバーの高さを変更しよう。TestNavigationController.swiftを以下のコードに変更する。//デリゲート先に自分を設定する。//ナビゲーションアイテムのタイトルに画像を設定する。//ナビゲーションバーの高さを設定する。{super.viewDidLoad()//デリゲート先に自分を設定する。{//ナビゲーションアイテムのタイトルに画像を設定する。"title_img.png"))//ナビゲーションバーの高さを設定する。80)}}以下は実際のプレイ動画。ナビゲーションバーの高さが広くなった。「画面遷移後の呼び出しメソッド」は別の画面に移動したときに実行されるため、画面端末の向きを縦横に切り替えると高さが元に戻ってしまう。ナビゲーションバーの体裁を変更するにはナビゲーションバーのサブクラスを使う必要があるようだ。⇒「stackoverflowの投稿」そこでナビゲーションバーのサブクラスを作ってバーの高さを調整してみよう。メニューから「File」⇒「New」⇒「File...」を選択する。Class」を選択する。ofに「UINavigationBar」を入力し、Nextボタンを押す。保存先を指定する画面が表示されるので、プロジェクトと同じ場所であることを確認し、Createボタンを押す。TestNavigationBar.swiftを以下のコードに変更する。ビューの表示が更新されるときに「ビューのサイズを返すメソッド」と「サブビューのレイアウトを行うメソッド」が呼び出される。「ビューのサイズを返すメソッド」では、ビューの高さを80に変更してサイズを返している。「サブビューのレイアウトを行うメソッド」では、サブビューがUIImageViewクラスだった場合にY座標を15に変更している。//ビューに含まれるサブビューを1つずつ取得する。//サブビューのクラスがUIImageViewの場合、Y座標を15にする。{super.layoutSubviews()//ビューに含まれるサブビューを1つずつ取得する。{//サブビューのクラスがUIImageViewの場合、Y座標を15にする。黄緑枠のアイデンティティインスペクタボタンを押して設定画面を表示し、Classに「TestNavigationBar」を設定する。これでナビゲーションバーの表示にカスタムクラスが使われるようになった。以下は実際のプレイ動画。端末の向きを変更してもナビゲーションバーの高さが80で保たれるようになった。タイトルを2行で表示するtitleViewには画像に限らずUIViewクラスを継承している部品なら何でも設定できる。TextNavigationController.swiftを以下のコードに変更すると、タイトルとサブタイトルの2行が表示される。//デリゲート先に自分を設定する。//タイトルのラベルを作成する。//サブタイトルを作成する。//スタックビューに追加する。//ナビゲーションバーのタイトルに設定する。{super.viewDidLoad()//デリゲート先に自分を設定する。CGRectMake(0,0,100,40)//タイトルのラベルを作成する。"タイトル"//サブタイトルを作成する。"サブタイトル"//スタックビューに追加する。stackView.addArrangedSubview(testLabel1)stackView.addArrangedSubview(testLabel2)//ナビゲーションバーのタイトルに設定する。【Swift】Segueの設定。遷移先画面の登場シーンや重ね方を変更する。...【Swift】Segueの使い方。遷移先のビューコントローラーにデータを渡す。Controllerの使い方。複数画面を階層的に移動する。バーの色や背景画像をカスタマイズする。画面上部にタイトルとページ移動のボタンを設置する。コメントをキャンセルメールアドレスが公開されることはありません。