简体   繁体   English

在xcode中将图像添加到导航栏?

[英]Adding image to Navigation bar in xcode?

I have added Navigation bar and Navigation Item in xib. 我在xib中添加了导航栏和导航项。 Now I need to add image to the left of Navigation bar, but its not getting added. 现在我需要在导航栏的左侧添加图像,但它没有被添加。 This is the code I'm working on: 这是我正在处理的代码:

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

I can't understand why the image is not getting added. 我无法理解为什么图像没有被添加。 How can I add it? 我该如何添加它?

Looks like this is an old question with an accepted answer. 看起来这是一个老问题,接受了答案。 However, I wanted to add: 但是,我想补充一下:

In at least Xcode 5, if you are using storyboards then you can add the image as the navigationBar's title by dragging an empty view into the title area, and then placing the ImageView inside the empty view. 至少在Xcode 5中, 如果您使用的是故事板,则可以通过将空视图拖动到标题区域,然后将ImageView放在空视图中,将图像添加为navigationBar的标题。

The following screenshot should give you an idea of how it looks: 以下屏幕截图可以让您了解它的外观: 故事板截图描绘了navigationBar.titleView内空视图内的imageView

@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 

UPDATE UPDATE

just add this code in your viewDidLoad: method.. 只需在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; 

and also if you want to direct set image in background of NavigationBar then use bellow line... 如果你想在NavigationBar的背景中直接设置图像,那么使用波纹线...

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

also see this Link how-to-add-a-customized-image-button-to-uinavigationbar-in-iphone-sdk 也看到这个链接如何添加定制图像按钮到uinavigationbar-in-iphone-sdk

i hope this help you... 我希望这能帮到你......

- (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];
   }

If you want to set your image at particular point in navigation bar then you can make a view and then add your image inside the view, adjust your image frame and then add this view to your navBar. 如果要在导航栏中的特定点设置图像,则可以创建视图,然后在视图中添加图像,调整图像框,然后将此视图添加到导航栏。

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];

If you are adding NavBar from xib then just make IBOutlet for your UINavigationBar connect it in xib then 如果您要从xib添加NavBar,那么只需为您的UINavigationBar创建IBOutlet ,然后在xib中连接它

[myNavigationBar addSubview:view];

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
    }

Try to set the imageView.frame also please cross check the image initailized properly 尝试设置imageView.frame也请交叉检查图像initailized正确

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];

Your code looks ok. 你的代码看起来不错。 But I don't know why you need to add navigation bar and item in xib. 但我不知道你为什么需要在xib中添加导航栏和项目。 If you create your own view controller derived from UIViewController, it has contained navigation bar. 如果您创建自己的视图控制器派生自UIViewController,它包含导航栏。 You may try to remove yourself added navigation bar and item from xib and see what's happen. 您可以尝试从xib中删除自己添加的导航栏和项目,看看发生了什么。

If you want to show nav bar on the first view of a view-based application, you need to modify your application class code as below: 如果要在基于视图的应用程序的第一个视图上显示导航栏,则需要修改应用程序类代码,如下所示:

- (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;
}

I just did a test like the following: 我刚做了如下测试:

  1. Create a new single-view based project. 创建一个新的基于单一视图的项目。
  2. Run it without any modification. 无需任何修改即可运行它。 It will show an empty screen. 它将显示一个空屏幕。
  3. Modify didFinishLaunchingWithOptions() as above in the application.m file. 在application.m文件中修改上面的didFinishLaunchingWithOptions()。
  4. In the viewcontroller.m, add the following lines. 在viewcontroller.m中,添加以下行。

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

  5. Now run again. 现在又跑了。 You will see a nav bar with a image as title. 您将看到一个带有图像标题的导航栏。

I hope this will help you sure. 我希望这会对你有所帮助。 if not work mean check your image name is correct. 如果不工作意味着检查你的图像名称是否正确。

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;

if you wish add action means : 如果你希望添加动作意味着:

[buttonBarButton addTarget:self action:@selector(your function) forControlEvents:UIControlEventTouchUpInside];

To hide / show the image between movements to another controller do this. 要在移动到另一个控制器之间隐藏/显示图像,请执行此操作。 Adjust the CGRectMake dimensions accordingly. 相应地调整CGRectMake尺寸。

Add this to your header file: 将其添加到头文件中:

@property (weak, nonatomic) UIImageView *navBarLogo;

Add this to your .m controller file: 将其添加到.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];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM