在 Interface Builder 中设置为 UIButton 的 Attributed Title 属性在应用程序中被忽略

Posted

技术标签:

【中文标题】在 Interface Builder 中设置为 UIButton 的 Attributed Title 属性在应用程序中被忽略【英文标题】:Attributed Title attributes set to UIButton in Interface Builder are ignored in app 【发布时间】:2015-05-15 17:40:27 【问题描述】:

我有一个 UIButton,我在 Interface Builder 中给了一个属性标题:它有一个特定的字体,并且字符串的一部分是不同的颜色。

当我加载我的应用程序时,颜色保持不变,但应用程序将字体恢复为系统默认值...

有人遇到过这种情况或知道解决方法吗?试图避免在代码中设置属性标题。

如果重要的话,我使用的字体是 Open Sans,它可以正确显示在我在代码中指定字体的其他标签上。

【问题讨论】:

UILabel 有完全相同的问题(归因于 IB 中的自定义字体)。好像是个bug…… 你试过能不能通过代码设置吗?你使用的是什么版本的 ios?我遇到了一个问题,即某些属性在 8.1 上没有应用于标签、按钮等,但在所有其他版本中都可以正常工作。不知道为什么会这样。只是想知道这是否相似 在代码中工作正常。虽然希望让它从 Interface Builder 中工作。这是在 iOS 8.3 模拟器上运行的。我想我得尝试一些不同的版本。 根据我的经验,IB 中的属性字符串功能非常缺乏。我个人建议在代码中这样做以避免头痛。 您不会在代码中更改文本本身,是吗?这可能会根据您的操作方式重置属性。 【参考方案1】:

您是否尝试在更改按钮字体之前选择文本??

【讨论】:

当然。字体在 IB 中正确显示,只是在应用程序中显示不正确。【参考方案2】:

一周前我遇到了同样的问题。我也在使用 Open Sans。但是每次我尝试构建时,我都会遇到一个编译错误,没有指向任何地方。

无论如何.. 我只是为按钮添加了一个标签,并按照我想要的方式进行了配置。

【讨论】:

【参考方案3】:
 NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [style setAlignment:NSTextAlignmentCenter];
    [style setLineBreakMode:NSLineBreakByWordWrapping];

    NSDictionary *dict1 = @NSFontAttributeName:[UIFont fontWithName:@"Varela Round" size:15.0f],
                            NSForegroundColorAttributeName:[UIColor whiteColor],
                            NSParagraphStyleAttributeName:style;
    NSDictionary *dict2 = @NSFontAttributeName:[UIFont fontWithName:@"Varela Round"  size:10.0f],
                            NSForegroundColorAttributeName:[UIColor whiteColor],
                            NSParagraphStyleAttributeName:style;

    NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] init];
    [attString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Expensed\n"    attributes:dict1]];
    [attString appendAttributedString:[[NSAttributedString alloc] initWithString:@"Tap to edit"      attributes:dict2]];
    [cell.expenseTripButton setAttributedTitle:attString forState:UIControlStateNormal];
    [[cell.expenseTripButton titleLabel] setNumberOfLines:0];
    [[cell.expenseTripButton titleLabel] setLineBreakMode:NSLineBreakByWordWrapping];

【讨论】:

以上是关于在 Interface Builder 中设置为 UIButton 的 Attributed Title 属性在应用程序中被忽略的主要内容,如果未能解决你的问题,请参考以下文章

在 Interface Builder 中设置委托与使用 setDelegate: 有啥区别?

在 Interface Builder 中设置 Nib Name 字段时出现异常

在 Interface Builder (XCode 4) 中设置 UIButton 拉伸背景图像

如何在 XCode 5 Interface Builder 中设置accessibilityLabel 或accessibilityIdentifier?

如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?

自定义字体仅在 Interface Builder 中设置时可用