web-dev-qa-db-ja.com

UINavigationItem titleViewのサイズ/位置の制御

私のアプリでは、ナビゲーションのタイトルとして配置したい、PNGに保存されたカスタムタイトル(フォントではないレタリング付き)をいくつか持っています。タイトルのレタリングはすべて異なるビューコントローラーですべて同じサイズにしたいので、イラストレーターではすべて同じサイズと幅にすることに取り組んでいます(短い文字列に対応するために空白スペースを用意しています)。私は以下を行います:

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]];
titleImageView.contentMode = UIViewContentModeCenter;
self.navigationItem.titleView = titleImageView;
[titleImageView release];

また、各navigationBarに含まれる要素(つまり、戻るボタン、右ボタンなど)に基づいて、画像のサイズと位置が任意に変更されているようです。

どのようにtitleViewの制御を取得して、必要なサイズと位置を実装できるようにし、任意にサイズ変更/再配置しないようにしているのでしょうか。

22
Ser Pounce

タイトルビューとしてイメージビューを使用する代わりに、イメージビューを含む別のビューを作成します。ナビゲーション項目のタイトルビューとしてthat viewを設定します。これで、タイトルビュー内で画像ビューのフレームを自由に調整できます。

44
Jeff Kelley

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;

お役に立てば幸いです。

31
Nishant Tyagi

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
12
user3109460

更新された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