1

我可以在不覆盖该drawRect方法的情况下执行此操作吗?

我尝试了以下方法:

UIImage *navBarImage = [[UIImage imageNamed:@"image_navbg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];
[self.descriptionBar setBackgroundColor:[UIColor colorWithPatternImage:navBarImage]];
[self.bottomBar setBackgroundColor:[UIColor colorWithPatternImage:navBarImage]];

其中 image_navbg.png 是一个纯哑光黑色方块。我得到的结果仍然是黑灰色渐变。

设置这些也无济于事:

[self.descriptionBar setTranslucent:YES];
[self.bottomBar setTranslucent:YES];
4

3 回答 3

3

我想用导航控制器内置的工具栏做同样的事情。您使用以下方法显示它:

[self.navigationController setToolbarHidden:NO];

为了消除这种工具栏上的渐变(至少在 iOS 4 和更早版本中),我成功地使用了以下技术。首先,我将此添加到我的 appDelegate 标头中:

@interface MyToolbar : UIToolbar {}

- (void)drawRect:(CGRect)rect;

@end

然后我将此添加到我的 appDelegate .m 文件中

@implementation MyToolbar

- (void)drawRect:(CGRect)rect {
    UIColor *colorTabBlack = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents( [colorTabBlack CGColor]));
    CGContextFillRect(context, rect);
}
@end

然后在 IB 中,我将(现在可见的)工具栏的类切换为“MyToolbar”——我花了很长时间才弄清楚这一点,这就是我发布它的原因。希望它可以帮助别人!

于 2012-10-25T04:07:16.457 回答
2

如果您的目标是 iOS 5,请为此使用UIAppearance - 不要再覆盖-drawRect:

于 2012-07-24T09:01:46.347 回答
0

我就是这样做的。对我来说效果很好。您可能必须在子视图中尝试不同的索引。

// Change color of searchbar
[[self.searchbar.subviews objectAtIndex:0] removeFromSuperview];
self.searchbar.backgroundColor = [UIColor blackColor];

// Change color of toolbar
[[self.toolbar.subviews objectAtIndex:0] removeFromSuperview];
self.toolbar.backgroundColor = [UIColor blackColor];
于 2013-04-19T15:19:18.617 回答