I would like to place a logo/image in the left side of NavigationBar
. I try this in codes, but it is not worked properly.
UIImage *logo = [UIImage imageNamed:@"logo.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage: logo];
imageView.frame = CGRectMake(2, 2, 40, 40);
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:logo];
I try with view to be placed first then place image as UIImageView but alignment is not good. And moreover view appears to be white space while run the code..
Insert the Bar Button Item
into your Viewcontroller
on left Side, and insert the image in Bar item
see the image
I had the same problem in my last project, you can create a new logo.png which dimension is equal to 500*88 pixels, make you logo in the left side of it. filled with transparent color from the rest of the png.
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logoName_500.png"]];
[titleImageView setFrame:CGRectMake(0, 0, 250, 44)];
self.navigationItem.titleView = titleImageView;
hope this helpful.
Try it like this:
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo"]];
Also make sure UIImage is not nil and it does have a valid image.
What I usually do is
1. Hide Navigation Bar
[self.navigationController setNavigationBarHidden:YES animated:NO];
2. Use image of size 640 x 88 & 320 x 44
UIImage *navigationImage = [UIImage imageNamed:@"navigationImage.png"];
3. Use this image in Imageview at frame CGRectMake(0,0,320,44)
UIImageView *navImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,44)];
navImageView.image = navigationImage;
[self.view addSubview:navImageView];
I think this is the problem with image rendering mode. Can you try the below code
UIImage *logo = [[UIImage imageNamed:@"logo"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:logo style:UIBarButtonItemStylePlain target:self action:nil];
self.navigationItem.leftBarButtonItem = item;
You can even try with your current code by setting the UIImageRenderingModeAlwaysOriginal
.
@property(nonatomic,strong) UIView *titleImageView;
- (UIView *)titleImageView {
if (!_titleImageView) {
CGFloat width = self.view.frame.size.width;
_titleImageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, 44)];
[self.titleLabelView setBackgroundColor:[UIColor clearColor]];
UIImage *img = [UIImage imageNamed:@"myImg"];
UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
CGRect imageViewRect = imgView.frame;
/*
//adjust image position if you need
imageViewRect.x = 10;
imageViewRect.y = 3;
imageView.frame = imageViewRect;
*/
[_titleLabelView addSubview:imgView];
}
return _titleLabelView;
}
self.navigationItem.titleView = self.titleLabelView;
UIBarButtonItem *logoItem1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:nil];
UIBarButtonItem *logoItem2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItem target:self action:nil];
NSArray *actionButtonItems = @[logoItem1, logoItem2];
self.navigationItem.rightBarButtonItems = actionButtonItems;