我想做一些我认为很简单但结果非常困难的事情!我想为我的导航控制器的导航栏和工具栏设置样式。我希望他们都有:
- 自定义背景图像,我知道我可以使用外观代理,但这不符合以下几点的要求。
- 导航栏和工具栏应该与我为它们设置的背景图像高度相同。我试过设置框架高度,但没有用。
- 最后,我想向导航栏和工具栏添加一些按钮(具有特定的高度和宽度,而不是固定/标准),但我希望工具栏/导航的行为就像 UIView。
如何实现这三点?谢谢!
我想做一些我认为很简单但结果非常困难的事情!我想为我的导航控制器的导航栏和工具栏设置样式。我希望他们都有:
如何实现这三点?谢谢!
我想添加一个更好的解决方案(在我看来):为 UINavigationBar 和 UIToolbar 添加一个类别,例如:
UINavigationBar+myNavBar.m
#import "UINavigationBar+myNavBar.h"
@implementation UINavigationBar (myNavBar)
- (CGSize)sizeThatFits:(CGSize)size {
UIImage *header = [UIImage imageNamed:@"Images/backgrounds/header"];
CGSize newSize = CGSizeMake(header.size.width,header.size.height);
return newSize;
}
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"Images/backgrounds/header"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
UINavigationBar+myNavBar.h
#import <UIKit/UIKit.h>
@interface UINavigationBar (myNavBar)
- (CGSize)sizeThatFits:(CGSize)size;
@end
UIToolbar 的解决方案几乎完全相同。
我为此所做的是创建看起来与内置导航栏完全相同的图像。我还创建了一个与默认按钮非常接近的后退按钮。你当然可以为所欲为。这确实花费了相当多的时间,但是一旦你这样做了,你就可以将它们作为 UIImageView 和 UIButton 加载到你的应用程序中。非常简单。并且完全可定制。
- (void) viewDidLoad {
UIView *navBarView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,44)];
UIImageView *navBarImg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,44)];
[navBarImg setImage:[UIImage imageNamed:@"navigationBarImage"]]; // the name of the .png file you made
[navBarView addSubview:navBarImg];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setBackgroundImage:[UIImage imageNamed:@"backButtonNormal"] forState:UIControlStateNormal];
[backButton setBackgroundImage:[UIImage imageNamed:@"backButtonHighlighted"] forState:UIControlStateHighlighted];
[backButton setFrame:CGRectMake(5,5,40,35)]; //Depends on how you do your button
[backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[navBarView addSubview:backButton];
//Repeat for any other buttons you wish to add.
[self.view addSubview:navBarView];
}
- (IBAction) backButtonPressed:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
//Pushing VC's
// I usually make a declared property for the VC and then:
- (IBAction) visitNextVC {
NextVC *_nextVC = [[NextVC alloc] initWithNibName:@"NextVC" bundle:nil];
[self setNextVC:_nextVC];
[self.navigationController pushViewController:nextVC animated:YES];
}