如何以编程方式将平面背景 UIColor 渲染为 UIToolbar 的背景?

Posted

技术标签:

【中文标题】如何以编程方式将平面背景 UIColor 渲染为 UIToolbar 的背景?【英文标题】:How to programmatically render a flat background UIColor as the background for a UIToolbar? 【发布时间】:2011-04-13 21:36:01 【问题描述】:

所以我遵循了一个教程,该教程允许我继承 UIToolbar 并绘制图像作为 UIToolbar 的自定义背景。

代码是这样的:

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect

    UIImage *backgroundImage = [UIImage imageNamed:@"toolbar_background.png"];
    [backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];

这完美无缺。考虑到我只是希望我的工具栏背景是纯色。基本上类似于 [UIColor blackColor],在 drawRect 方法中有没有更简单的方法来做到这一点?

[UIColor blackColor] 可用时,必须制作一个 320 x 44 px 高度的平坦黑色背景图像并将其与上述代码一起使用似乎是极大的开销?我只是不确定如何在这里实现它。

我想过做这样的事情:

- (void)drawRect:(CGRect)rect

  UIView *test = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.frame.size.width,self.frame.size.height)];

  test.backgroundColor = [UIColor blackColor];
  [self addSubview:test];

但这不起作用,因为 UIView COVERS 我稍后添加的所有 UIToolbar 项目,即工具栏是黑色的,是的,但黑色覆盖所有工具栏项目,因此它们不可见.

有解决办法吗?

谢谢。

【问题讨论】:

像这样覆盖drawRect: 方法是一个非常糟糕的想法 【参考方案1】:

您无需创建子类即可创建平面 UIToolbar。只需设置 BackgroundColor、BackgroundImage 和 ShadowImage。

[toolbar setBackgroundColor:[UIColor blackColor]];
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[toolbar setShadowImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny];

【讨论】:

【参考方案2】:

在第一个示例中覆盖-drawRect: 方法,但不是绘制图像,而是使用UIRectFill 方法,如下所示:

[[UIColor blackColor] setFill];
UIRectFill(self.bounds);

【讨论】:

以上是关于如何以编程方式将平面背景 UIColor 渲染为 UIToolbar 的背景?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将渲染设置为PrimeFaces列?

如何以编程方式将 Activity 的背景颜色设置为白色?

如何以编程方式为单个指定的商店视图重建Magento产品平面数据?

如何在 Holo 主题 Api 11-17 Android 中以编程方式将 EditText 背景设置为默认值

如何以编程方式为一组 UIButtons 设置单独的背景图像

以编程方式将 EditText 的背景资源设置为透明字段