CATextLayer количество строк?
Мой CATextlayer поддерживает только 1 строку, иначе текст обрезается.
пытаясь установить текстовое содержимое как UILabel Behavior... это возможно?
установить "количество строк"
настроить размер текста с помощью статического фрейма 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];