【发布时间】:2010-12-28 19:20:33
【问题描述】:
是否可以从图像中为 UIToolBar 提供自定义背景,而不是通常的蓝色/黑色淡出?
我尝试为视图提供背景并设置 UIToolBar 的不透明度,但这也会影响其上任何 UIBarButtons 的不透明度。
【问题讨论】:
是否可以从图像中为 UIToolBar 提供自定义背景,而不是通常的蓝色/黑色淡出?
我尝试为视图提供背景并设置 UIToolBar 的不透明度,但这也会影响其上任何 UIBarButtons 的不透明度。
【问题讨论】:
在这里回答我自己的问题!!!覆盖 drawRect 函数并创建 UIToolbar 的实现就可以了:)
@implementation UIToolbar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"nm010400.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
【讨论】:
drawInRect:self.bounds怎么样?
UIToolbar 继承自 UIView。这对我有用:
[topBar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:BAR_BKG_IMG]] autorelease] atIndex:0];
【讨论】:
loreto 答案的略微修改版本,适用于我在 ios 4 和 5 上:
// Set the background of a toolbar
+(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)toolbar {
// Add Custom Toolbar
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:bgFilename]];
iv.frame = CGRectMake(0, 0, toolbar.frame.size.width, toolbar.frame.size.height);
iv.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Add the tab bar controller's view to the window and display.
if([[[UIDevice currentDevice] systemVersion] intValue] >= 5)
[toolbar insertSubview:iv atIndex:1]; // iOS5 atIndex:1
else
[toolbar insertSubview:iv atIndex:0]; // iOS4 atIndex:0
toolbar.backgroundColor = [UIColor clearColor];
}
【讨论】:
这是我用于 iOS 4 和 5 兼容性的方法:
if ([toolbar respondsToSelector:@selector(setBackgroundImage:forToolbarPosition:barMetrics:)]) {
[toolbar setBackgroundImage:[UIImage imageNamed:@"toolbar-background"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
} else {
[toolbar insertSubview:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"toolbar-background"]] autorelease] atIndex:0];
}
【讨论】:
只需将此作品添加到您的-(void)viewDidLoad{}
[toolBarName setBackgroundImage:[UIImage imageNamed:@"imageName.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
【讨论】:
如果您使用 idimmu 的答案并希望您的 barbuttonitems 被着色而不是默认值,您也可以将这几行代码添加到您的类别中:
UIColor *color = [UIColor redColor];
self.tintColor = color;
【讨论】:
iOS5 以后可以使用 Appearance API:
[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_bg"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
【讨论】:
要兼容 iOS 5,您可以执行以下操作
-(void) addCustomToolbar {
// Add Custom Toolbar
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"customToolbar.png"]];
img.frame = CGRectMake(-2, -20, img.frame.size.width+4, img.frame.size.height);
// Add the tab bar controller's view to the window and display.
if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO( @"5.0" ) )
[self.tabBarController.tabBar insertSubview:img atIndex:1]; // iOS5 atIndex:1
else
[self.tabBarController.tabBar insertSubview:img atIndex:0]; // iOS4 atIndex:0
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
// Override point for customization after application launch.
[self.window addSubview:tabBarController.view];
}
【讨论】:
这个对我来说很好用:
ToolbarOptions *tbar = [[ToolbarOptions alloc] init];
[tbar setToolbarBack:@"footer_bg.png" toolbar:self.toolbarForPicker];
[tbar release];
#import <Foundation/Foundation.h>
@interface ToolbarOptions : NSObject {
}
-(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)toolbar;
@end
#import "ToolbarOptions.h"
@implementation ToolbarOptions
-(void)setToolbarBack:(NSString*)bgFilename toolbar:(UIToolbar*)bottombar {
// Add Custom Toolbar
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:bgFilename]];
iv.frame = CGRectMake(0, 0, bottombar.frame.size.width, bottombar.frame.size.height);
iv.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// Add the tab bar controller's view to the window and display.
if([[[UIDevice currentDevice] systemVersion] intValue] >= 5)
[bottombar insertSubview:iv atIndex:1]; // iOS5 atIndex:1
else
[bottombar insertSubview:iv atIndex:0]; // iOS4 atIndex:0
bottombar.backgroundColor = [UIColor clearColor];
}
@end
【讨论】:
您可以使用基本上向 UIToolBar 添加新属性的类别来执行此操作。覆盖drawRect 可以工作,但不一定是未来的证明。自定义 UINavigationBar 的相同策略在 iOS 6 中停止工作。
这就是我的做法。
viewDidLoad
【讨论】: