7

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

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

在此处输入图像描述

谢谢。:)

4

7 回答 7

11

如果我没有误会你,这就是你想要的吗?

NSString *uppercaseString = [yourString uppercaseString];
于 2012-01-16T09:34:00.940 回答
3

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

在 iOS 上以小型大写字母排版字体

于 2014-03-04T10:29:28.603 回答
3

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

于 2012-01-16T09:56:41.023 回答
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 设置,这应该足够简单,以便以后添加。

例子:

在此处输入图像描述

于 2012-12-16T09:36:53.027 回答
1

你可以试试这个

NSString* str=@"mudit"; label.text=[str 大写字符串];

它会给你这样的输出:MUDIT

于 2012-01-16T09:40:37.087 回答
0

试试这个

    NSString *string = @"askdfjgjksdfgh";
NSString *upString = [string uppercaseString];
NSLog(@"U %@", upString);
于 2012-01-16T09:39:52.530 回答
0

不能更改UILabel.

你想要做的是有 2 个标签,一个在乞求第一个更大的字母,一个在后面的剩余单词。

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

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

你在图片中看到的可能是文字的图片而不是UILabels。

于 2012-01-16T10:07:02.050 回答