具有图像和标题的UIToolbar UIBarButtonItem具有非常暗淡的文本

MyC*_*nie 4 iphone uitoolbar uibarbuttonitem

我的iPhone视图在其工具栏中添加了一些自定义按钮.每个按钮都有图像和文本标题,并按如下方式创建:

UIBarButtonItem *fooButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"foo.png"] style:UIBarButtonItemStylePlain target:self action:@selector(fooButtonPressed:)];
fooButton.title=@"Foo";
Run Code Online (Sandbox Code Playgroud)

标题的文字显得很暗; 看起来它的alpha值约为0.5.如果我使用默认的UIToolBar barStyle,我根本无法读取文本.当使用UIBarStyleBlack时,我可以阅读文本,但它看起来仍然很暗淡.

我也尝试了initWithTitle,然后设置了image属性; 结果是一样的.

有没有办法照亮文字?我希望看起来类似于UITabBar,其项目同时具有图像和标题.

谢谢您的帮助!

Joh*_*nus 7

我试图使用UIBarButtonItem来显示图像和按钮,但我很确定它被锁定以显示一个或另一个.使用此线程的基本思想,我想出了一个使用UIButton和背景图像的解决方案.我所做的最大缺陷是,当标题文字的大小变化很大时,背景图像会拉伸,导致圆角略微偏离.

CustomBarButtonItem.h

#import <UIKit/UIKit.h>


@interface CustomBarButtonItem : UIBarButtonItem {}

- (id) initWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action;

@end


@interface UIBarButtonItem (CustomBarButtonItem)

+ (UIBarButtonItem *) barButtonItemWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action;

@end
Run Code Online (Sandbox Code Playgroud)

CustomBarButtonItem.m

#import "CustomBarButtonItem.h"


@implementation CustomBarButtonItem

- (id) initWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action {

    UIButton *barButton = [UIButton buttonWithType:UIButtonTypeCustom];
    UIFont *font = [UIFont boldSystemFontOfSize:13];
    barButton.titleLabel.font = font;
    barButton.titleLabel.shadowOffset = CGSizeMake(0, -1);
    barButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 5);
    [barButton setImage:image forState:UIControlStateNormal];
    [barButton setTitle:title forState:UIControlStateNormal];
    [barButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [barButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateHighlighted];
    [barButton setTitleShadowColor:[[UIColor blackColor] colorWithAlphaComponent:0.5] forState:UIControlStateNormal];
    [barButton setBackgroundImage:[UIImage imageNamed:@"bar-button-item-background.png"] forState:UIControlStateNormal];
    barButton.frame = CGRectMake(0, 0, image.size.width + 15 + [title sizeWithFont:font].width, 30);

    if (self = [super initWithCustomView:barButton]) {
        self.target = target;
        self.action = action;
    }

    return self;
}

@end


@implementation UIBarButtonItem (CustomBarButtonItem)

+ (UIBarButtonItem *) barButtonItemWithImage:(UIImage *)image title:(NSString *)title target:(id)target action:(SEL)action {
    return [[[CustomBarButtonItem alloc] initWithImage:image title:title target:target action:action] autorelease];
}

@end
Run Code Online (Sandbox Code Playgroud)

样品用法:

UIBarButtonItem *customButtonItem = [UIBarButtonItem barButtonItemWithImage:[UIImage imageNamed:@"calendar.png"] title:@"Add to calendar" target:self action:@selector(addToCalendar)];
Run Code Online (Sandbox Code Playgroud)

我的按钮背景图片是:

替代文字

  • 这真的有助于拉伸:UIImage*bImage = [UIImage imageNamed:@"bar-button-item-background.png"]; UIImage*sbImage = [bImage stretchableImageWithLeftCapWidth:23 topCapHeight:0]; //用这个作为背景 (3认同)