6

背景:我一直在尝试用粗体和斜体字体以及普通字体显示一个句子。

问题:我怎样才能显示这样的“你好,我的名字是字节”。请注意,字节既是粗体又是斜体,而其他单词保持正常。

我已经尝试过:我认为 coreText 应该能够做一些事情,我只是无法找到正确的方法来做到这一点。我也使用了 TTTAttributeLabel 并且不能使它既粗体又斜体。我已经加载了 Three20,只是不知道要使用哪个或什么。Webview 不适用于我的背景。


作为对 Carles Estevadeordal 的回复

UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(10, 360, 300, 40)];
[webView setBackgroundColor: [UIColor clearColor]];
[webView loadHTMLString:[NSString stringWithFormat:@"<html><body style=\"background-color: transparent;\">Hello, my name is <b><i>Byte</b></i></body></html>"] baseURL:nil];
[self.view addSubview:webView];

这正是我使用的代码。它显示白色背景。

4

5 回答 5

7

睡个好觉后,我找到了一种使用TTTAtributedlabel的方法。方法如下:

TTTAttributedLabel *attLabel = [[TTTAttributedLabel alloc]initWithFrame:CGRectMake(x, y, xx, yy)];
NSString *text = @"Hello, my name is Byte";

[attLabel setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^(NSMutableAttributedString *mutableAttributedString) {

    //font helvetica with bold and italic 
    UIFont *boldSystemFont = [UIFont fontWithName:@"Helvetica-BoldOblique" size:10];

    CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);

    NSRange boldRange = [[mutableAttributedString string] rangeOfString:@"Byte" options:NSCaseInsensitiveSearch];
    [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange];

    CFRelease(font);

    return mutableAttributedString;
}];

我仍然没有办法将 2 个属性(即:分别为粗体和斜体)添加到同一个单词/字母中。但这可以解决问题。

于 2012-04-10T20:47:16.040 回答
2

如果您仍然对此问题的 CoreText 解决方案感兴趣:

newFont = CTFontCreateCopyWithSymbolicTraits(fontRef,
                                             self.textSize,
                                             NULL,
                                             kCTFontBoldTrait | kCTFontItalicTrait,
                                             kCTFontBoldTrait | kCTFontItalicTrait);

[attrString addAttribute:(NSString*)kCTFontAttributeName
                   value:(id)newFont
                   range:[copyString rangeOfString:customText.text]];
于 2013-01-10T14:10:15.553 回答
2

您可以在 sender 是 UIButton 的实例的情况下使用它

   sender.titleLabel.font=[UIFont fontWithName:@"Helvetica-BoldOblique" size:18.0f];
于 2013-06-19T11:15:46.930 回答
1

添加两个属性(这是非 ARC 代码):

#define kLabelFontSize 16.0

NSString labelString = @"Let's slide loudly";

[self.tttLabel setText:labelString afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {

    UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:kLabelFontSize];
    CTFontRef boldFont = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
    if (boldFont) {
        [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)boldFont range:NSMakeRange(6, 11)];
        CFRelease(boldFont);
    }

    UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:kLabelFontSize];
    CTFontRef italicFont = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, italicSystemFont.pointSize, NULL);
    if (italicFont) {
        [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)italicFont range:NSMakeRange(12, 18)];
        CFRelease(italicFont);
    }

    }];

    return mutableAttributedString;
}];
于 2012-04-11T15:25:36.420 回答
0

如果句子具有固定格式,最简单的解决方案是使用 2 种不同的 UILabel,一种使用普通字体,另一种使用粗体和斜体字体集。

如果句子是动态的,那么您应该使用 UIWebView 对象,因为它是一个 lavel 并加载一个简单的网页,其中包含您的文本和 < b > < i > </i > </b > 字段在您需要时设置在现场粗体和斜体如:

[myWebViewLabel loadHTMLString:[NSString stringWithFormat:@"<html><body style=\"background-color: transparent;\">Hello, my name is <b><i>Byte</b></i></body></html>"] baseURL:nil];

我希望它有所帮助。

于 2012-04-09T22:16:32.463 回答