I've set a background image for my UINavigationBar using a subclass and overriding the DrawRect method as follows:
- (void)drawRect:(CGRect)rect {
// Drawing code
UIImage *img = [UIImage imageNamed: #"nav_bar.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
// Set tint colour
[self setTintColor:[UIColor blackColor]];
}
As you'll see, I've also changed the tintColor of the nav bar so that my nav bar buttons automatically change colour.
My problem is that when you tap on (must be a proper name for the effect) one of the nav bar buttons, it doesn't change to a different/lighter colour like the default nav bar style.
I'm also using a UISegmentControl in one of my nav bar's and both the segment items appear with the same tint colour so you can't tell which is currently selected, I assume that's the same problem I'm having with the nav bar buttons.
Any help is much appreciated.
Thanks.
I think there is a colour change, but it is just not obvious. You either have to use a different tintColor, and create a custom UIBarButtonItem with custom image
Related
I try to set image on navigation bar. when we pressed more button in tabbar..The default colour is blue.i wanna set image and chnge the colour of more label from white to green..Please help me
My code is given below, but it does not work
Appdelegte.m
tabMenu.moreNavigationController.navigationBar.tintColor = [UIColor colorWithPatternImage:[Uiimage imagewithnamed :#"nav.png"]];
tabMenu.moreNavigationController.delegate =self;
tabMenu.delegate = self;
You can do it like this :
[[[self.tabBarController moreNavigationController] navigationBar] setBackgroundImage:[UIImage imageNamed:#"myImage"] forBarMetrics:UIBarMetricsDefault];
However You can get instance of this "More" ViewController using...
UIViewController *moreViewController = tabBarController.moreNavigationController.topViewController;
moreViewController.view property contains UITableView and we can use it.
For example : To Add tableHeaderView :
UITableView *moreTableView = (UITableView*)moreViewController.view;
moreTableView.tableHeaderView = myOwnCustomView;
For more Reference you can check this Thread on Apple : moreNavigationController
So I'm building an iOS application, and I customized my UINavigationBar to be taller than the default size. A couple problems have arisen, however.
My content acts as if the UINavigationBar is of the default height. This results in any views at y=0 to actually be hidden, or partially hidden, by my taller UINavigationBar. I have to manually place views the correct offset downward, which isn't a terribly huge issue, but I'm curious as to whether anyone has found a way to fix this. Essentially my UINavigationBar is being treated as a normal one with a larger background image.
Any views/buttons in my UINavigationBar are not tappable if the portion being tapped is below the typical 44px bottom of a normal UINavigationBar. Anything within the normal range works fine, but below that 44px mark it doesn't register. Again, it's as if my UINavigationBar is being treated by the application as one with a normal height but a large background image. This is a much more critical issue that I really need to resolve.
Here is the code that modifies my UINavigationBar:
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:#"navBarBackground_iPhone.png"] forBarMetrics:UIBarMetricsDefault];
[self.navController.navigationBar setBackgroundColor:[UIColor whiteColor]];
[self.navController.navigationBar setFrame:CGRectMake(0, 0, self.frame.size.width, 72)];
This is performed in my main window's -makeKeyAndVisible after my UINavigationController is allocated and initialized with a root view controller. The background image is 320px wide and 72px tall (double for the #2x version).
As you can see, I attempt to set the UINavigationBar's height here, after this portion of code it doesn't seem to stick. It reverts to 44px.
I've tried unsuccessfully to subclass UINavigationBar. Any help is greatly appreciated.
Try to subclass UINavigationBar and override the following method:
- (void)drawRect:(CGRect)rect
{
int heightYouWant = 100;
UIImage *image = [UIImage imageNamed:#"title_bar_bg.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, heightYouWant)];
self.tintColor = [UIColor colorWithRed:1/255.0 green:62/255.0 blue:130/255.0 alpha:1];
}
Add this method to your subclass of UINavigationBar:
- (void)layoutSubviews {
[super layoutSubviews];
CGRect barFrame = self.frame;
barFrame.size.height = heightYouWant;
self.frame = barFrame;
}
I am using iOS 5 UINavigationBar's UIAppearance protocol in order to customise all my navigation bars.
Here is my customisation function:
- (void)customizeApperance
{
[[UINavigationBar appearance] setTintColor:[UIColor clearColor]];
[[UINavigationBar appearance] setAlpha:0.7];
UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"title.png"]];
[[UINavigationBar appearance] setTitleView:titleView];
}
I have two problems:
The first is that the colour not appearing as clearColor but black. Any suggestions?
The title view is not appearing at all. Ray Wenderlich shows how to do that by adding a: [[rootViewController navigationItem] setTitleView: [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"miniLogo.png"]]] in applicationDidFinishLaunching. But the problem with this is that the title view would only be added in the root view controller. I am using a UINavigationController and when I tired to replace the rootViewController with navigationController (the name of my navigation controller in AppDelegate), I cannot see the title view at all. How can I fix that? Why isn't it working in customizeApperance()? Isn't the whole point of using appearance is to just create a title view once (as I did above the function) and have it global in all navigation bars? How can I achieve that?
[UIColor clearColor] is a fully transparent color (alpha = 0). Setting that as tint color makes the (black) background shine through. Perhaps you want [UIColor whiteColor] ?
titleView is a property of UINavigationItem, and each view controller has it's own navigationItem. Therefore you cannot set a title view globally. But you can set the background image of UINavigationBar with the appearance protocol, perhaps that helps:
[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
Have you tried titleView.opaque = NO;? If that's set to YES (i.e. by default, since you're using initWithImage:), the drawing system will assume your view fills its entire bounds, and won't bother drawing anything that overlaps its frame.
setTitleView: is a method on NavigationItem. But you are calling it on navigation bar
I created a custom Navbar for my application using a protocoll:
#implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: #"navbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
#end
this works fine. all toolbars in my application look great now. but i also want a way to tint my uibarbuttonitems in my toolbar. i could set the tint color of every button, but this does not work on pre-defined items like the ones in my mailcomposerview and so on.
is there a way to give all my buttons a tint color? just like i've done that with my navigation bar.
You'll need to set the tintColor for navigationBar property of your navigation controller.
self.tintColor = whatever in your drawRect will do it
Is there a way to customize navigation button, segment button background like iBooks?
Check out iBooks shelf top left corner. the button background is about 50% transparent.
What a pretty!
Any one konw how to emplement it?
All Regards
It looks to me as though it's a UIButton with an alpha of say, 0.5, ontop of a UINavigationbar with a custom background.
Try dropping something like this into your appDelegate.m
#implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: #"navigationBar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
#end
Alternatively you could drop in a method here,
And when you add your button to the Navigation bar..
button.alpha = 0.5;
Hope that helps