私のアプリでは、ナビゲーションのタイトルとして配置したい、PNGに保存されたカスタムタイトル(フォントではないレタリング付き)をいくつか持っています。タイトルのレタリングはすべて異なるビューコントローラーですべて同じサイズにしたいので、イラストレーターではすべて同じサイズと幅にすることに取り組んでいます(短い文字列に対応するために空白スペースを用意しています)。私は以下を行います:
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];
また、各navigationBar
に含まれる要素(つまり、戻るボタン、右ボタンなど)に基づいて、画像のサイズと位置が任意に変更されているようです。
どのようにtitleView
の制御を取得して、必要なサイズと位置を実装できるようにし、任意にサイズ変更/再配置しないようにしているのでしょうか。
タイトルビューとしてイメージビューを使用する代わりに、イメージビューを含む別のビューを作成します。ナビゲーション項目のタイトルビューとしてthat viewを設定します。これで、タイトルビュー内で画像ビューのフレームを自由に調整できます。
UINavigationbarタイトルビューのサイズと位置を制御できます。 imageviewを直接titleviewとして設定しないでください。代わりに、カスタムUIViewを作成し、要件に従ってフレームを設定し、titleImageViewをサブビューとして追加します。
UIView *backView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];// Here you can set View width and height as per your requirement for displaying titleImageView position in navigationbar
[backView setBackgroundColor:[UIColor greenColor]];
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.frame = CGRectMake(45, 5,titleImageView.frame.size.width , titleImageView.frame.size.height); // Here I am passing Origin as (45,5) but can pass them as your requirement.
[backView addSubview:titleImageView];
//titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = backView;
お役に立てば幸いです。
Swiftでは、次のように実行できます。
var titleView = UIView(frame: CGRectMake(0, 0, 100, 40))
var titleImageView = UIImageView(image: UIImage(named: "cocolife"))
titleImageView.frame = CGRectMake(0, 0, titleView.frame.width, titleView.frame.height)
titleView.addSubview(titleImageView)
navigationItem.titleView = titleView
更新されたSwift4コード:
var titleView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 40))
var titleImageView = UIImageView(image: UIImage(named: "headerlogo"))
titleImageView.frame = CGRect(x: 0, y: 0, width: titleView.frame.width, height: titleView.frame.height)
titleView.addSubview(titleImageView)
navigationItem.titleView = titleView