在Objective C中更改字体样式 - (以全部格式设置标签文本)

时间:2012-01-16 09:21:21

标签: iphone objective-c uilabel uifont capitalization

我想将UILabel文本字体样式设置为Small-Caps格式,如下图所示。

如果有人知道,请给我解决方案,

enter image description here

感谢。 :)

7 个答案:

答案 0 :(得分:11)

如果我没有弄错你,这就是你想要的吗?

NSString *uppercaseString = [yourString uppercaseString];

答案 1 :(得分:4)

iOS中可用的字体没有“资本风格”。您应该添加自己的字体或尝试使用函数CTFontDescriptorCreateCopyWithFeature创建字体 我认为最简单的方法是使用混合字体大小构建属性字符串(NSAttributedString)。

答案 2 :(得分:3)

对于iOS 7自定义字体,此方法由Anthony Mattox描述。对于系统字体我不知道如何。

Typesetting a font in small caps on iOS

答案 3 :(得分:1)

你可以试试这个

NSString * str = @“mudit”; label.text = [str uppercaseString];

它将为您提供如下输出:MUDIT

答案 4 :(得分:1)

要将UILabel渲染为大写字符串,每个单词的第一个字母较大,您可以执行以下操作:

@implementation CapitalicTextLabel

- (void)drawRect:(CGRect)rect
{

    // Drawing code
    NSArray* words = [self.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetCharacterSpacing(context, 1);
    CGContextSetFillColorWithColor(context, [self.textColor CGColor]);
    CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f );
    CGContextSetTextMatrix (context, myTextTransform);

    CGFloat x = 0;
    float centeredY = (self.font.pointSize + (self.frame.size.height - self.font.pointSize) / 2) - 2;
    CGFloat firstLetterSize = self.font.pointSize * 1.4;

    for (NSString* word in words)
    {
        NSString* letter = [[word substringToIndex:1] uppercaseString];
        CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], firstLetterSize, kCGEncodingMacRoman);
        CGContextShowTextAtPoint(context, x, centeredY, [letter cStringUsingEncoding:NSASCIIStringEncoding], [letter length]);
        x = CGContextGetTextPosition(context).x;

        NSString* restOfWord = [[[word substringFromIndex:1] uppercaseString] stringByAppendingString:@" "];
        CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize,
            kCGEncodingMacRoman);
        CGContextShowTextAtPoint(context, x, centeredY, [restOfWord cStringUsingEncoding:NSASCIIStringEncoding], [restOfWord length]);
        CGPoint v = CGContextGetTextPosition(context);
        x = CGContextGetTextPosition(context).x;
    }

}

@end

此实现不处理跨多行的分割或遵循TextAlignment设置,这应该足够简单,以便随后添加。

示例:

enter image description here

答案 5 :(得分:0)

试试这个

    NSString *string = @"askdfjgjksdfgh";
NSString *upString = [string uppercaseString];
NSLog(@"U %@", upString);

答案 6 :(得分:0)

无法在UILabel内更改单个字母的字体大小或类型。

你想要做的是拥有2个标签,一个是在第一个更大的字母的乞讨中,另一个是在剩余的单词之后。

为了访问第一个字母和单词的其余部分,您可以使用:

NSString * word = @"COMPLETED";
NSString * firstLetter = [word substringToIndex:1];
NSString * remainingWord = [word substringFromIndex:1];

你在图片中看到的可能是单词的图片,而不是UILabel s。