iOS - [UIColor clearColor] 和 UIToolbars

Posted

技术标签:

【中文标题】iOS - [UIColor clearColor] 和 UIToolbars【英文标题】:iOS - [UIColor clearColor] and UIToolbars 【发布时间】:2011-09-02 11:22:43 【问题描述】:

我一直在尝试将[UIColor clearColor]UIToolbar 一起使用,以使自定义控制界面更适合“机械”应用程序(想想你会在70 年代的电影中看到的按钮)。

发生的情况是,当我将工具栏设置为 clearColor 时,它会变成哑光黑色。它背后的图像是红色、棕褐色和黑色,所以我确定它没有按预期工作。

我看到的一个区别是我使用的是导航控制器上的工具栏,而不是独立的 UIToolbar

代码行是

self.navigationController.toolbar.translucent = YES;
self.navigationController.toolbar.backgroundColor = [UIColor clearColor];

而我的上方导航栏(在另一个视图中设置)是UIBarStyleBlackTranslucent,这会不会被扔掉?

任何追踪此问题的帮助都会很棒。

【问题讨论】:

小评论:在 Objective-C 中你应该使用 YES/NO 而不是 TRUE/FALSE。后者有效,但不推荐使用。 【参考方案1】:

您可以使用以下代码为导航控制器的工具栏设置透明背景:

// UIToolbar.h
@interface UIToolbar (Transparency)
- (void)drawRect:(CGRect)rect;
@end
// UIToolbar.m
#import "TransparentToolbar.h"
@implementation UIToolbar (Transparency)
- (void)drawRect:(CGRect)rect 
    [[UIColor clearColor] set];
    CGContextFillRect(UIGraphicsGetCurrentContext(), rect);

@end

用法:

// bar_bottom_bumped.png is a toolbar image with transparency
UIImage *bg = [UIImage imageNamed:@"bar_bottom_bumped.png"];
UIImageView *background = [[UIImageView alloc] initWithImage:bg];
background.frame = self.navigationController.toolbar.bounds;
background.autoresizingMask = UIViewAutoresizingFlexibleWidth;
BOOL isios5 = [[[UIDevice currentDevice] systemVersion] intValue] >= 5;
self.navigationController.toolbar.backgroundColor = [UIColor clearColor];
[self.navigationController.toolbar insertSubview:background atIndex: (isIOS5 ? 1 : 0)];

【讨论】:

这似乎只修改了顶部的导航栏,而不是 UIToolbar...需要挖掘一下,看看我是否可以完成这项工作。 对。我确定了答案,试试看。

以上是关于iOS - [UIColor clearColor] 和 UIToolbars的主要内容,如果未能解决你的问题,请参考以下文章

Swift开发教程--设置UIViewController的背景透明

如何使 UIView 透明

如何在 iOS 8 上为 superview 制作 clearColor

iOS 8.0 中的 UISearchBar barTintColor clearColor 错误

UIView clearColor 的问题

iOS CGColor 与 UIColor