Я попал сюда из Google, пытаясь сделать то же самое с UITextField. Я реализовал что-то, что будет работать в общем случае для UILabel ниже.
@interface AdjustableUILable : UILabel {
CGFloat characterSpacing;
}
@property CGFloat characterSpacing;
@end
@implementation AdjustableUILable
@synthesize characterSpacing;
- (void)drawTextInRect:(CGRect)rect
{
if (characterSpacing)
{
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat size = self.font.pointSize;
CGContextSelectFont (context, [self.font.fontName UTF8String], size, kCGEncodingMacRoman);
CGContextSetCharacterSpacing (context, characterSpacing);
CGContextSetTextDrawingMode (context, kCGTextFill);
// Rotate text to not be upside down
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(context, xform);
const char *cStr = [self.text UTF8String];
CGContextShowTextAtPoint (context, rect.origin.x, rect.origin.y + size, cStr, strlen(cStr));
}
else
{
// no character spacing provided so do normal drawing
[super drawTextInRect:rect];
}
}
@end
Затем, чтобы использовать его, просто установите метку в viewDidLoad или что-то в этом роде
- (void)viewDidLoad
{
myLabel.characterSpacing = 2; // point size
}
Я пробовал это с UITextField, но, к сожалению, он добавляет интервал между символами только после того, как пользователь отредактировал поле. -drawTextInRect вызывается только после метода делегата -textFieldShouldEndEditing. На других форумах некоторые высказывали предположение, что это связано с тем, что UITextField должен знать отображение шрифта для отображения курсора. Никогда не нашел решения для этой штуки ...