2

我在 xib 中添加了导航栏和导航项。现在我需要在导航栏的左侧添加图像,但它没有被添加。这是我正在处理的代码:

- (void)viewDidLoad
{
UIImage *image = [UIImage imageNamed: @"i_launcher.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
    self.navigationItem.titleView = imageView;
    [imageView release];
}

我不明白为什么没有添加图像。我怎样才能添加它?

4

9 回答 9

8

看起来这是一个已被接受的老问题。但是,我想补充:

至少在 Xcode 5 中,如果您使用情节提要,则可以通过将空视图拖动到标题区域,然后将 ImageView 放置在空视图中来将图像添加为导航栏的标题。

以下屏幕截图应该让您了解它的外观: 故事板屏幕截图描绘了 navigationBar.titleView 内空视图内的 imageView

于 2014-09-24T15:52:27.233 回答
6
@implementation UINavigationBar (CustomImage) -(void)drawRect:(CGRect)rect { 

     CGRect currentRect = CGRectMake(0,0,100,45); 
     UIImage *image = [UIImage imageNamed:@"ic_launcher.png"]; 
     [image drawInRect:currentRect]; 
} 
@end 

更新

只需在您的方法中添加此代码viewDidLoad:..

self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage.png"]];
UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"yourimage2.jpg"]]];    
self.navigationItem.rightBarButtonItem = item; 

并且如果你想在 NavigationBar 的背景中直接设置图像,那么使用下面的线......

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"i_launcher.png"] forBarMetrics:UIBarMetricsDefault];

另请参阅此链接how-to-add-a-customized-image-button-to-uinavigationbar-in-iphone-sdk

我希望这可以帮助你...

于 2012-11-28T05:49:17.633 回答
3
- (void)viewDidLoad

    {


       UIImage *image = [UIImage imageNamed:@"Your Image"];
       UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
       imageView.frame = CGRectMake(5, 10, 72, 19);
       [self.navViewController.navigationBar addSubview:imageView];
   }
于 2012-11-28T06:05:56.747 回答
1

如果您想在导航栏中的特定点设置您的图像,那么您可以创建一个视图,然后将您的图像添加到视图中,调整您的图像框架,然后将此视图添加到您的导航栏。

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Default.png"]];
[image setFrame:CGRectMake(0, 0, 44, 44)];
[view addSubview:image];
[self.navigationController.navigationBar addSubview:view];

如果您要从 xib 添加 NavBar,那么只需在 xibIBOutletUINavigationBar连接它即可

[myNavigationBar addSubview:view];
于 2012-11-28T06:54:56.830 回答
1

For Swift 4:

override func viewDidAppear(_ animated: Bool) {
        // 1
        let nav = self.navigationController?.navigationBar

        // 2
        nav?.barStyle = UIBarStyle.black
        nav?.tintColor = UIColor.yellow

        // 3
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
        imageView.contentMode = .scaleAspectFit

        // 4
        let image = UIImage(named: "Apple_Swift_Logo")
        imageView.image = image

        // 5
        navigationItem.titleView = imageView
    }
于 2018-02-04T09:36:22.637 回答
0

尝试设置imageView.frame也请交叉检查正确初始化的图像

UIImage *image = [UIImage imageNamed: @"i_launcher.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
imageView.frame.origin.x = 30.0; // You will have to find suitable values for the origin
imageView.frame.origin.y = 5.0;
self.navigationItem.titleView = imageView;
[imageView release];
于 2012-11-28T05:43:27.880 回答
0

你的代码看起来不错。但是不知道为什么需要在xib中添加导航栏和item。如果您创建自己的从 UIViewController 派生的视图控制器,它包含导航栏。您可以尝试从 xib 中删除自己添加的导航栏和项目,看看会发生什么。

如果要在基于视图的应用程序的第一个视图上显示导航栏,则需要修改应用程序类代码,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];

    // REMOVE THIS LINE !!!!!!!!!!!!!
    //self.window.rootViewController = self.viewController;

    // ADD BELOW TWO LINES !!!!!!!!!!!!!!!!!!!!!!!
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = nav;

    [self.window makeKeyAndVisible];
    return YES;
}

我刚刚做了如下测试:

  1. 创建一个新的基于单视图的项目。
  2. 无需任何修改即可运行。它将显示一个空屏幕。
  3. 在 application.m 文件中修改 didFinishLaunchingWithOptions() 。
  4. 在 viewcontroller.m 中,添加以下行。

    -(void)viewDidLoad { [超级 viewDidLoad]; UIImageView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; view.image = [UIImage imageNamed:@"info.png"]; self.navigationItem.titleView = 视图;}

  5. 现在再次运行。您将看到一个以图像为标题的导航栏。

于 2012-11-28T05:46:31.907 回答
0

我希望这会对你有所帮助。如果不起作用意味着检查您的图像名称是否正确。

UIImage *yourimage = [UIImage imageNamed: @"i_launcher.png"];

UIButton *buttonBarButton = [ UIButton buttonWithType:UIButtonTypeCustom];
buttonBarButton.frame = CGRectMake(0, 0,yourimage.size.width,yourimage.size.height);
[buttonBarButton setBackgroundImage:yourimage forState:UIControlStateNormal];
[buttonBarButton addTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *buttonBarButtonItem = [[[UIBarButtonItem alloc]initWithCustomView:buttonBarButton] autorelease];
self.navigationItem.leftBarButtonItem = buttonBarButtonItem;

如果您希望添加操作意味着:

[buttonBarButton addTarget:self action:@selector(your function) forControlEvents:UIControlEventTouchUpInside];
于 2012-11-28T06:36:20.267 回答
0

要在移动到另一个控制器之间隐藏/显示图像,请执行此操作。相应地调整 CGRectMake 尺寸。

将此添加到您的头文件中:

@property (weak, nonatomic) UIImageView *navBarLogo;

将此添加到您的 .m 控制器文件中:

- (void)viewWillAppear:(BOOL)animated {

    UIImage *image = [UIImage imageNamed:@"image_name.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(53, 7, 210, 30);

    self.navBarLogo = imageView;

    [self.navigationController.navigationBar addSubview:imageView];

}

- (void)viewWillDisappear:(BOOL)animated {

    [self.navigationController.navigationBar sendSubviewToBack:self.navBarLogo];
}
于 2014-05-19T15:40:47.240 回答