2012-01-18 4 views
2

Я измерил свою строку, чтобы максимизировать высоту по высоте (1 строка), чтобы всякая чрезмерная ширина была обрезана (как в середине глифа), которую должен делать lineBreakMode: UILineBreakModeClip. Вместо этого текст кажется усеченным (?) Путем рисования только полных символов, которые соответствуют (не ожидаемые или желаемые). В основном:Невозможно сделать клип UILabel

[label setNumberOfLines:1]; 
label.font = [UIFont systemFontOfSize:64.0f]; 
label.lineBreakMode = UILineBreakModeClip; 
[label setText:@"ABCDEIIIIII"]; 

ответ

1

A related, more complicated question предлагает решение этого: создайте ярлык большой ширины и добавьте его в UIView вашей желаемой ширины. (Затем добавьте UIView в свое приложение.) Настройка свойства clipToBounds UIView даст вам желаемый клип в середине глифа.

Пояснение: Предположим, вы хотите, чтобы метка отрезала при 100px. Установите UILabel на ширину 200 и он будет счастливо отображать 100 пикселей, которые вы хотите. Урезает ли он полные буквы в 200, вам все равно. Вы добавляете этот ярлык в UIView 100px с установленными записями ClipToBounds, и после этого он покажет вам только желаемый 100px ярлыка и отключите его от середины глифа.

адаптировано из другого поста, чтобы проиллюстрировать:

UIView *topContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)]; 
topContainer.clipsToBounds = YES; 
topContainer.opaque = NO; 
topContainer.backgroundColor = [UIColor clearColor]; 

UILabel *topLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; 
[topLabel setText:@"ABCDEIIIIII"]; 
topLabel.opaque = NO; 

[topContainer addSubview:topLabel]; 
[self.view addSubview:topContainer]; 
1

пытаются использовать:

label.clipsToBounds = YES; 
label.layer.masksToBounds = YES; 

, чтобы получить эффект, который вы хотите.

Смежные вопросы