Home > 移动互联, 语言编程 > iOS开发之创建背景透明或含有自定义图片的UIToolbar

iOS开发之创建背景透明或含有自定义图片的UIToolbar

iOS系统自带的UIToolbar的样式简单,往往不能满足开发或特殊目的的需要,例如设置完全背景透明的UIToolbar或者自定义UIToolbar的背景色,这时候就需要对UIToolbar进行单独定制。
设置UIToolbar背景透明,只需要设置UIToolbar的backgroundColor为[UIColor clearColor]即可,如果需要单独定制UIToolbar的背景色,则需要继承并自己实现UIToolbar对象。
直接修改背景色请参照以下的方法1,继承并自己实现UIToolbar对象请参照方法2。


方法1
iOS6.1之前

1
2
3
4
5
6
7
8
//使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以后

1
2
3
4
5
[self.toolbar setBackgroundImage:[UIImage new]
forToolbarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
forToolbarPosition:UIToolbarPositionAny];

方法2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//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
Categories: 移动互联, 语言编程 Tags:
  1. hw
    April 29th, 2014 at 05:57 | #1

    你说的方法1根本无效。

  2. 李大仁
    April 29th, 2014 at 18:02 | #2

    @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

  1. No trackbacks yet.