67

ナビゲーション バーのタイトルとして画像を設定することはできますか?

NYTimesアプリはナビゲーションバーを使っていて、タイトルが画像ファイルのようになっていると思います(そう見えるのUINavigationBarは検索に右ボタンを使っているからです)。

4

16 に答える 16

131

次のようUIImageViewに、プロパティにを使用できます。UINavigationItem.titleView

self.navigationItem.titleView = myImageView;
于 2008-11-14T07:45:54.157 に答える
16

高さ約 35px の透明な .png がうまく機能していることがわかります。

- (void)awakeFromNib {

//put logo image in the navigationBar

UIImageView* img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
self.navigationItem.titleView = img;
[img release];

}
于 2009-02-23T18:38:40.233 に答える
13

ストーリーボードから直接実行できます(Xcode 7以降):

  1. ビューコントローラーのメインビューの外にビューを作成します。ネストされたビューまたは単なる画像にすることができます
  2. ビュー コントローラーにナビゲーション項目を追加する
  3. ナビゲーション アイテムから Ctrl+ドラッグし、外側のビューにドロップします

ここに画像の説明を入力

4.タイトルビューを選択

ここに画像の説明を入力

于 2016-03-13T06:39:05.353 に答える
8

UINavigationBarのカスタムカテゴリを次のように作成しました

UINavigationBar + CustomImage.h

#import <UIKit/UIKit.h>

@interface UINavigationBar (CustomImage)
    - (void) setBackgroundImage:(UIImage*)image;
    - (void) clearBackgroundImage;
    - (void) removeIfImage:(id)sender;
@end

UINavigationBar + CustomImage.m

#import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)

- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(110,5,100,30);
    [self addSubview:imageView];
    [imageView release];
}

- (void) clearBackgroundImage {
    NSArray *subviews = [self subviews];
    for (int i=0; i<[subviews count]; i++) {
        if ([[subviews objectAtIndex:i]  isMemberOfClass:[UIImageView class]]) {
        [[subviews objectAtIndex:i] removeFromSuperview];
    }
   }    
}

@end    

UINavigationControllerから呼び出します

[[navController navigationBar] performSelectorInBackground:@selector(setBackgroundImage:) withObject:image];
于 2008-11-17T15:31:07.603 に答える
7

このラインはあなたのために働きます、私はいつもこれを使います

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"imageNavBar.png"]  forBarMetrics:UIBarMetricsDefault];
于 2012-10-01T19:57:55.123 に答える
5

UINavigationBar+CustomImage.m を変更して、タイトルがまだユーザーに表示されるようにしました。addSubview: の代わりに insertSubview: atIndex: を使用するだけです。

UINavigationBar+CustomImage.m

#import "UINavigationBar+CustomImage.h"

@implementation UINavigationBar (CustomImage)

- (void) setBackgroundImage:(UIImage*)image {
    if (image == NULL) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, 320, 44);
    [self insertSubview:imageView atIndex:0];
    [imageView release];
}

- (void) clearBackgroundImage {
    NSArray *subviews = [self subviews];
    for (int i=0; i<[subviews count]; i++) {
        if ([[subviews objectAtIndex:i]  isMemberOfClass:[UIImageView class]]) {
        [[subviews objectAtIndex:i] removeFromSuperview];
    }
   }    
}

@end
于 2009-01-09T15:15:03.687 に答える
5

これもよく効きます

[self.navigationController.navigationBar.topItem setTitleView:[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"YourLogo"]]];
于 2015-06-17T14:19:37.680 に答える
0

以下は、(Xamarin の) MonoTouch with C#.NET でこれを行う方法です。

NavigationController にある UIViewConvrtoller を作成し、いつでもこれを呼び出します。

someNiceViewControllerYouMade.NavigationController.NavigationBar
     .InsertSubview(new UIImageView
     (MediaProvider.GetImage(ImageGeneral.navBar_667x44)),0);

注: MediaProvider は、画像をフェッチする単なるクラスです。

この例では、ビューをナビゲーション バー全体に表示し、項目のキャプションのテキストも表示できるようにします。

于 2011-09-12T02:56:07.297 に答える
0

SWIFTを使用して画像を naviagtionBar に追加します。この画像は、収まるようにスケーリングされ、境界に合わせてクリップされます。この関数は、View Controller の viewDidLoad() 関数内で呼び出すことができます。

func setupNavigationBarWithTitleImage(titleImage: UIImage) {

    let imageView = UIImageView(image: titleImage)
    imageView.contentMode = .ScaleAspectFit
    imageView.clipsToBounds = true
    navigationItem.titleView = imageView

}
于 2016-08-19T11:10:32.440 に答える
0

ios5.0 では、標準要素の外観をカスタマイズする機能が多数導入されました。タイトルに ImageView を使用したくない場合は、背景画像とカスタム フォント/色を使用してすべての UINavbars の外観をカスタマイズすることもできます。

- (void) customiseMyNav
{
    // Create resizable images
    UIImage *portraitImage = [[UIImage imageNamed:@"nav_bar_bg_portrait"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    UIImage *landscapeImage = [[UIImage imageNamed:@"nav_bar_bg_landscape"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    // Set the background image
    [[UINavigationBar appearance]  setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance]  setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];

    // set the title appearance
    [[UINavigationBar appearance] setTitleTextAttributes:
        [NSDictionary dictionaryWithObjectsAndKeys:
            [UIColor colorWithRed:50.0/255.0 green:150.0/255.0 blue:100/255.0 alpha:1.0], 
            UITextAttributeTextColor, 
            [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6], 
            UITextAttributeTextShadowColor, 
            [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
            UITextAttributeTextShadowOffset, 
            [UIFont fontWithName:@"Arial-Bold" size:0.0], 
            UITextAttributeFont, 
            nil]];
}
于 2012-08-22T04:07:32.230 に答える
0

使うだけ

[navController.navigationBar insertSubview:myImage atIndex:0] ;

ここで、myImage は UIImageView 型で、navController は UINavigationController 型です

于 2010-02-25T13:05:41.383 に答える
0

MonoTouch では、これを使用できます。

 this.NavigationItem.TitleView = myImageView;
于 2012-09-10T21:22:38.820 に答える
0

ナビゲーションを前後に移動するとボタンが消える場合、これで修正されました。

NSArray *mySubviews = navigationBar.subviews;
UIImageView *iv = nil;

// Move in reverse direction as not to upset the order of elements in the array
for (int i = [mySubviews count] - 1; i >= 0; i--)
{
    if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
    {
        NSLog(@"found background at index %d",i);
        iv = [mySubviews objectAtIndex:i];
        [[mySubviews objectAtIndex:i] removeFromSuperview];
        [navigationBar insertSubview:iv atIndex:0];
    }
}
于 2011-11-16T10:40:11.520 に答える
0

UINavigationBar+CustomImage コードを変更して、メモリ リークなしで適切に動作するようにしました。

- (void)setBackgroundImage:(UIImage *)image
{
    if (! image) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [self addSubview:imageView];
    [imageView release];
}

- (void) clearBackgroundImage
{
    // This runs on a separate thread, so give it it's own pool
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSArray *mySubviews = self.subviews;

    // Move in reverse direction as not to upset the order of elements in the array
    for (int i = [mySubviews count] - 1; i >= 0; i--)
    {
        if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
        {
            [[mySubviews objectAtIndex:i] removeFromSuperview];
        }
    }

    [pool release];
}
于 2010-11-03T08:43:26.880 に答える