iOS开发之创建背景透明或含有自定义图片的UIToolbar
iOS系统自带的UIToolbar的样式简单,往往不能满足开发或特殊目的的需要,例如设置完全背景透明的UIToolbar或者自定义UIToolbar的背景色,这时候就需要对UIToolbar进行单独定制。
设置UIToolbar背景透明,只需要设置UIToolbar的backgroundColor为[UIColor clearColor]即可,如果需要单独定制UIToolbar的背景色,则需要继承并自己实现UIToolbar对象。
直接修改背景色请参照以下的方法1,继承并自己实现UIToolbar对象请参照方法2。
方法1
iOS6.1之前
//使button的tint色与导航条一致 toolbar.tintColor = self.navigationController.navigationBar.tintColor; toolbar.backgroundColor = [UIColor clearColor]; //设置为背景透明 for (UIView *view in [rightToolbar subviews]) { if ([view isKindOfClass:[UIImageView class]]) { [view removeFromSuperview]; } } |
iOS7以后
[self.toolbar setBackgroundImage:[UIImage new] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault]; [self.toolbar setShadowImage:[UIImage new] forToolbarPosition:UIToolbarPositionAny]; |
方法2
//MyToolbar.h @interface MyToolbar : UIToolbar @end //MyToolbar.m @implementation MyToolbar - (id)initWithFrame:(CGRect)aRect { if ((self = [super initWithFrame:aRect])) { self.opaque = NO; self.backgroundColor = [UIColor clearColor]; //设置为背景透明,可以在这里设置背景图片 //self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]]; self.clearsContextBeforeDrawing = YES; } return self; } - (void)drawRect:(CGRect)rect { // do nothing } @end |
你说的方法1根本无效。
@hw
本文发布时间较早,方法1的代码只在iOS6.1之前有效,iOS7.0以后请使用
[self.toolbar setBackgroundImage:[UIImage new]
forToolbarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
forToolbarPosition:UIToolbarPositionAny];
iOS6.1下验证代码附上,供参考
@interface XXXXViewController : UINavigationController
@property(strong,nonatomic)UIToolbar *toolbar;
@end
@implementation XXXXViewController
@synthesize toolbar;
– (void)viewDidLoad
{
[super viewDidLoad];
self.toolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 100, 44)];
[self.navigationBar addSubview:self.toolbar];
}
– (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationBar.hidden = NO;
self.toolbar.tintColor = self.navigationController.navigationBar.tintColor;
self.toolbar.backgroundColor = [UIColor clearColor]; //设置为背景透明
for (UIView *view in [self.toolbar subviews]) {
if ([view isKindOfClass:[UIImageView class]]) {
[view removeFromSuperview];
}
}
}
@end