IOSで開発しています。次のコードを使用して、背景をnavigationBar
に設定します。
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar-back"] forBarMetrics:UIBarMetricsDefault];
そして、次の図のように、navigationBar
とnavigationBar
の中心に画像を追加したいと思います。
Objective-CのnavigationBarの中央に画像を追加する方法
前もって感謝します。
あなたがアプリケーションのアイコンを設定すると言ったように。アプリケーション全体のアイコンが表示されます。
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];
出力:
ここで言及すべきことの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;
viewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
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()
}
幸運を
IOS 11とXcode 9がフレームではなく自動レイアウトでナビゲーションバーの管理を開始したため、同じ問題に直面していました。ナビゲーションバーのレイアウトに注意してください。
WWDCセッション204で、iOS 11向けのアプリの更新で、UIToolBarとUINavigationBarが自動レイアウトを使用するようにアップグレードされ、ゼロサイズのカスタムビューを回避するために、いくつかのことを知っておく必要があると述べられました。
UINavigationとUIToolBarは位置を提供しますが、気にしないでください。
カスタムビューのサイズを次のいずれかで指定する必要があります。
あなたの質問に答えて、私は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
これを試して :
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];
UIImageView *navbarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
navbarImageView.contentMode = UIViewContentModeScaleAspectFit;
self.navigationBar.titleView = navbarImageView;