2

我有一个应用程序,我正在迁移到 iOS 7。但是,UIBarbuttonItems 没有标题,但工作正常。这是我的代码:

UIBarButtonItem * uibbShare = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"sharewhite.png"] style:UIBarButtonItemStylePlain target:self action:@selector(sharePressed:)] autorelease];
// uibbShare.width = 56.0;  // uncommenting this doesn't change anything
uibbShare.title = @"Share";

然后我将其中一些添加到工具栏中,并在它们之间添加一些灵活的空间项。

...
 [items addObject:flex2];
 [items addObject:uibbShare];
...

[self.toolbar setItems:items animated:NO];

在 iOS 7 上,它们根本没有标题,在 iOS6 上一切正常。你不能再在 ios7 中创建这样的 barbuttons 了吗?

更新开发论坛上的相同问题:

UIBarButtonItem 不能同时拥有标题和图片?

工具栏图标下的文本发生了什么变化?

编辑:(7对6)

在此处输入图像描述

编辑2:(来自Reveal的一张图片,似乎文字不见了,框架/边界为0。wtf)

在此处输入图像描述

4

3 回答 3

1

最终为 UIBarButtonItems 创建了自定义视图。这不是很好,但它会暂时起作用。我只是将旧的 UIBarButtonItems 传递给该函数,该函数返回一个新的。

注意:如果有标题,我只是向上移动按钮的图像并在下面添加一个简单的标签,实际上并没有弄乱 titleEdgeInsets 和 centering 。另外,我将宽度设置为默认的 56。

-(UIBarButtonItem *)convertToButton:(UIBarButtonItem *)original
{
    if ( SYSTEM_VERSION_LESS_THAN(@"7.0"))
        return  original;

    CGFloat textFieldHeight = 13.f;
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0, 0, 56, self.toolbar.frame.size.height);
    button.showsTouchWhenHighlighted = YES;
    [button setImage:original.image forState:UIControlStateNormal];
    [button addTarget:original.target action:original.action forControlEvents:UIControlEventTouchUpInside];
    button.tag = original.tag;

    UIView * wr = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 56, self.toolbar.frame.size.height)] autorelease];
    [wr addSubview:button];
    wr.backgroundColor = [UIColor clearColor];

    if (original.title != nil)
    {
        button.imageEdgeInsets = UIEdgeInsetsMake(-7, 0, 0, 0);
        UILabel * l = [[[UILabel alloc] initWithFrame:CGRectMake(0, self.toolbar.frame.size.height - textFieldHeight, 56, textFieldHeight)] autorelease];
        l.font = [UIFont systemFontOfSize:11.f];
        l.backgroundColor = [UIColor clearColor];
        l.textColor = [UIColor lightGrayColor];
        l.textAlignment = UITextAlignmentCenter;
        l.text = original.title;
        [wr addSubview:l];
    }

    UIBarButtonItem * theNew = [[[UIBarButtonItem alloc] initWithCustomView:wr] autorelease];
    theNew.tag = original.tag;
    theNew.width = 56;
    return theNew;

}
于 2013-10-09T12:28:18.660 回答
0
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont 
    fontWithName:@"YOURFONT" size:14], NSFontAttributeName, 
    [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar 外观] setTitleTextAttributes:attributes]; 关键是使用 NSFontAttributeName 等等。我假设他们正在转向使用 NS 品种来实现 64 位兼容性。上面的代码在我的 iOS7 设备上运行

于 2013-10-02T10:17:58.200 回答
0

尝试修改按钮的外观:

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor textColor], UITextAttributeTextColor, [UIFont yourFont and yourSizeSont], UITextAttributeFont, [UIColor shadowColor], UITextAttributeTextShadowColor, [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset, nil] forState:UIControlStateNormal];

在我最后的评论之后,我想到了这样的事情:

NSArray *views = [_UIToolbarNavigationButton subviews];

for (UIView *view in views) {
    if ([view isKindOfClass:[UIButtonLabel class]])
    {
        view.hidden = NO;
    }
}

我不知道它是否有用。

于 2013-10-02T10:20:25.933 回答