CATextLayer количество строк?

Мой CATextlayer поддерживает только 1 строку, иначе текст обрезается.

пытаясь установить текстовое содержимое как UILabel Behavior... это возможно?

  1. установить "количество строк"

  2. настроить размер текста с помощью статического фрейма CATextLayer

введите описание изображения здесь

CATextLayer *text_layer= [[CATextLayer alloc] init];
[text_layer setBackgroundColor:[UIColor clearColor].CGColor];
[text_layer setBackgroundColor:[UIColor blueColor].CGColor];
[text_layer setForegroundColor:layers.textColor.CGColor];
[text_layer setAlignmentMode:kCAAlignmentCenter];
[text_layer setBorderColor:layers.borderColor.CGColor];
[text_layer setFrame:CGRectMake(0,0,200,50)]; //note: frame must be static
[text_layer setString:@"thank you for your respond"];
 text_layer.wrapped = YES;
[text_layer setAlignmentMode:kCAAlignmentCenter];

1 ответ

Ваша проблема в этой линии прямо здесь, [text_layer setFrame:CGRectMake(0,0,200,50)];, Я не думаю, что CATextLayer выложится так, чтобы вместить несколько строк. Он будет только перерисовывать текст, чтобы обернуть его внутри границ слоя. Попробуйте отрегулировать рамку вашего текстового слоя на основе заданного текста. Вы можете создать UILabel Например, чтобы вычислить фрейм для многострочного текста с переносом слов и установите его в CATextLayer пример.

Вот UILabel Категория для расчета размера текста для многострочного текста с переносом слов:

@interface UILabel (Height)

- (CGSize)sizeForWrappedText;

@end

@implementation UILabel (Height)

- (CGSize)sizeForWrappedText {
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.bounds.size.width, CGFLOAT_MAX)];
    label.numberOfLines = 0;
    label.font = self.font;
    label.text = self.text;
    [label sizeToFit];
    return label.frame.size;
}

@end

Создать UILabel экземпляр и использовать sizeForWrappedText чтобы получить размер. Что-то вроде этого:

// Make sure the someFrame here has the preferred width you want for your text_layer instance.
UILabel *label = [[UILabel alloc] initWithFrame:someFrame];
[label setText:@"My awesome text!"];

CGRect frame = text_layer.frame;
frame.size = [label sizeForWrappedText];
[text_layer setFrame:frame];
Другие вопросы по тегам