iOS - UILabel с UITextAlignmentLeft обрезает целочисленный знак ∫, если это первый символ его текста - PullRequest
1 голос
/ 18 ноября 2010

Ниже приведен весь мой проект для иллюстрации проблемы:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    UILabel *integralLabel = [[UILabel alloc]initWithFrame: CGRectMake(30, 60, 200, 150)];
    integralLabel.font = [UIFont systemFontOfSize:100];
    [window addSubview:integralLabel];
    integralLabel.text = @"∫∫∫";
    integralLabel.textAlignment = UITextAlignmentLeft;
    integralLabel.backgroundColor = [UIColor yellowColor];
    [window makeKeyAndVisible];
    return YES;
}

Самый левый интегральный знак в метке обрезан.

Есть ли чистый способ исправить это?Содержимое моих ярлыков будет часто меняться в ответ на все виды вещей, поэтому я не хочу делать что-то хакерское.

1 Ответ

0 голосов
/ 18 ноября 2010

Вы можете добавить пробел в начале, если текст начинается со знака интеграла:

if ([[integralLabel.text substringToIndex:1]isEqualToString:@"∫"])
{
    integralLabel.text = [NSString stringWithFormat:@" %@", integralLabel.text];
}

EDIT

Чтобы различать этот пробел и другие пробелы в метке, вы можете использовать разные значения Юникода для пробелов (полный список здесь: http://www.cs.tut.fi/~jkorpela/chars/spaces.html)

@"\u205F%@"

и т.д ...

РЕДАКТИРОВАТЬ 2

Вы также можете создать подкласс UILabel, переопределив drawTextInRect:.

- (void)drawTextInRect:(CGRect)rect
{
    if (![[self.text substringToIndex:1]isEqualToString:@"∫"])
    {
        [super drawTextInRect:rect];
    }
    else
    {
        CGRect paddingLeftRect = CGRectMake(rect.origin.x + 25.0, rect.origin.y, rect.size.width, rect.size.height);
        [super drawTextInRect:paddingLeftRect];
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...