代码中创建的 UITabBarItem 图像不出现

Posted

技术标签:

【中文标题】代码中创建的 UITabBarItem 图像不出现【英文标题】:UITabBarItem image created in code doesn’t appear 【发布时间】:2014-03-10 20:19:09 【问题描述】:

我在代码中创建了以下视图,想法是将其用作UITableViewCellUITabBarItem中的图像:

- (void)drawRect:(CGRect)rect

    // Fill the background with white
    CGContextRef context = UIGraphicsGetCurrentContext();

    UIColor * whiteColor = [UIColor colorWithRed:1.0
                                           green:1.0
                                            blue:1.0
                                           alpha:1.0];

    CGContextSetFillColorWithColor(context, whiteColor.CGColor);
    CGContextFillRect(context, self.bounds);

    //// Color Declarations
    UIColor* fillColor = [UIColor colorWithRed: 1.0
                                         green: 1.0
                                          blue: 1.0
                                         alpha: 1.0];

    UIColor* strokeColor = [UIColor colorWithRed: 0.0
                                           green: 0.0
                                            blue: 0.0
                                           alpha: 1.0];

    //// Big Oval Drawing
    CGRect bigOvalRect = CGRectMake(rect.origin.x+2,
                                    rect.origin.y+5,
                                    42.0,
                                    42.0);

    UIBezierPath* bigOvalPath = [UIBezierPath bezierPath];

    [bigOvalPath addArcWithCenter: CGPointMake(CGRectGetMidX(bigOvalRect), CGRectGetMidY(bigOvalRect))
                         radius: CGRectGetWidth(bigOvalRect) / 2
                     startAngle: 40 * M_PI/180
                       endAngle: 320 * M_PI/180
                      clockwise: YES];

    [fillColor setFill];
    [bigOvalPath fill];
    [strokeColor setStroke];
    bigOvalPath.lineWidth = 1;
    [bigOvalPath stroke];

 

要从此 UIView 创建 UIImage,我正在使用以下代码:

#import <QuartzCore/QuartzCore.h>

+ (UIImage *) imageWithView:(UIView *)view

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;

当我在 UITableViewCells 中使用它时,一切都按预期工作,但是当我将它设置为我的 UITabBarItem 的图像时,我只看到一个蓝色矩形 (ios7):

MyIcon *icon = [[MyIcon alloc] initWithFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)];
UIImage *tabImage =[self imageWithView:icon];

self.navigationController.tabBarItem.image = tabImage;

我猜这与图像的 alpha 有关,但我该如何修复它?

【问题讨论】:

尝试使用self.navigationController.tabBarItem.image = tabImage;处的断点在控制台中预览图像。 如果可以看到图片,那么标签栏中的蓝色可能是由于图片大小的原因。尝试使用尺寸等于或小于48 x 32 尺寸的图像。 【参考方案1】:

这不是与视图大小有关的问题,而是与它的 alpha 相关的问题。

我通过将 backgroundColor(是 whiteColor)和 fillColor 设置为:

[UIColor clearColor]

并通过在initWithFrame: 方法中将视图设置为不透明:

[self setOpaque = NO];

【讨论】:

以上是关于代码中创建的 UITabBarItem 图像不出现的主要内容,如果未能解决你的问题,请参考以下文章

更改在 UITableView 中创建的 UIButton 的图像

如何在 UITabbaritem 上设置图像?

RMAN - 在备份中创建的额外项目

如何访问在 QtCreator Designer 中创建的 QLabel?

为在 PHP 中创建的图像添加边框

为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?