2017-12-12 13 views
0

私のCATextlayerは1行だけをサポートします それ以外の場合は、テキストがカットされます。CATextLayer行数?

UILabel Behaviorのようなテキストコンテンツを設定しようとしていますか?

  1. セット "行数"

  2. は、あなたの問題はここ、このラインである静的 CATextLayerフレーム

enter image description here

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]; 

答えて

0

でテキストサイズを調整[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]; 
+0

こんにちはParnay、 私のテキストレイヤーの*フレームは*すべての時間静的である必要があります。 フレームを分割し、フレームサイズでテキストのサイズを変更する方法を見つける必要があります。 (UILabelの行動のように...可能ですか?) –

+0

ええ、それは異なります。ラベルのフレームを静的にする必要がある場合、テキストのサイズがラベルのサイズを超えると、文字列は切り捨てられます。 truncationModeをkCATruncationNoneに設定してみてください。この方法では、テキストは切り詰められず、テキストレイヤーの境界内で折り返されます。しかし、サイズが超過すると、余分なテキストがクリップされます。固定されたフレームを設定すると、ある時点でUILabelがテキストを切り捨てます。 – Pranay

関連する問題