web-dev-qa-db-ja.com

Objective-Cのナビゲーションバーの中央に画像を追加する方法

IOSで開発しています。次のコードを使用して、背景をnavigationBarに設定します。

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];

そして、次の図のように、navigationBarnavigationBarの中心に画像を追加したいと思います。

enter image description here

Objective-CのnavigationBarの中央に画像を追加する方法

前もって感謝します。

15
Wun

あなたがアプリケーションのアイコンを設定すると言ったように。アプリケーション全体のアイコンが表示されます。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon"]];
CGSize imageSize = CGSizeMake(40, 40);
CGFloat marginX = (self.navigationController.navigationBar.frame.size.width / 2) - (imageSize.width / 2);

imageView.frame = CGRectMake(marginX, 0, imageSize.width, imageSize.height);
[self.navigationController.navigationBar addSubview:imageView];

出力:

enter image description here

6
Kampai

ここで言及すべきことの1つは、UIImageViewに幅3を使用することです。これは重要です。2(または偶数)の場合、画像はぼやけます。 clipToBounds = NOおよびcontentMode = UIViewContentModeScaleAspectFillを設定すると、画像は画像ビューの幅(細かい)の外側に表示され、正しく調整されます。

UIImageView *imageView = [[UIImageView alloc]
        initWithFrame:CGRectMake(0,0,3,44)];
    imageView.contentMode = UIViewContentModeScaleAspectFill;
    imageView.clipsToBounds = NO;
    imageView.image = [UIImage imageNamed:@"navigation-logo"];
    controller.navigationItem.titleView = imageView;
2
Ronaldoh1
 viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
1
Fawad Masud

Swift(4.2)で上記を行う必要がある場合:

以下の関数を書き留めます。

func addMiddleImage(){
    //Initialize your UIImage
    let yourImage = UIImage(named: "imageName")!.withRenderingMode(.alwaysOriginal)

    //Initialize a UIImageView
    let imageView = UIImageView(image: yourImage)

    //Set your Navigation Bar to the inialized UIImageView
    self.navigationItem.titleView = imageView

}

それをViewDidLoad()コールバックに追加します。

 override func viewDidLoad() {
    super.viewDidLoad()
    self.addMiddleImage()
}

幸運を

1
MhmdRizk

IOS 11とXcode 9がフレームではなく自動レイアウトでナビゲーションバーの管理を開始したため、同じ問題に直面していました。ナビゲーションバーのレイアウトに注意してください。

WWDCセッション204で、iOS 11向けのアプリの更新で、UIToolBarとUINavigationBarが自動レイアウトを使用するようにアップグレードされ、ゼロサイズのカスタムビューを回避するために、いくつかのことを知っておく必要があると述べられました。

UINavigationとUIToolBarは位置を提供しますが、気にしないでください。

カスタムビューのサイズを次のいずれかで指定する必要があります。

  • 幅と高さの制約。
  • 組み込みのContentSizeを実装する
  • 制約を介してサブビューを接続します。

あなたの質問に答えて、私はtitleViewをImageViewで設定し、2つの異なる方法でサイズを提供します:

高さと幅を明示的に指定します。

-(void)updateNavTitleView{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
    [imageView.widthAnchor constraintEqualToConstant:160].active = YES;
    [imageView.heightAnchor constraintEqualToConstant:44].active = YES;
    self.navigationItem.titleView = imageView;
}

またはアスペクトモードをaspectFitとして設定します

-(void) updateNavTitleView{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"TitleViewImage"]];
    [imageView setContentMode:UIViewContentModeScaleAspectFit];
    self.navigationItem.titleView = imageView;
}

セッションを見たい場合は Session 204

1

これを試して :

 UIImage *logo = [UIImage imageNamed:@"logo.png"];
 UIImageView *imageView = [[UIImageView alloc] initWithImage: logo];
 imageView.frame = CGRectMake(160, 2, 40, 40);
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo];
0
Nitin
UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;
0
AlexM