Как я могу сделать мой объект CATextLayer Scrollable как UITextView?

Я использовал CATextLayer для совместного отображения полужирного и обычного текста. Теперь, когда я получаю длинный текст из ответа веб-службы, я не могу отобразить полный текст. Может кто-нибудь, пожалуйста, помогите мне, каким должен быть способ сделать объект CATextLayer Прокручиваемый как textview. Пожалуйста, предложите мне какое-либо решение по этому поводу. Я также взял ссылку здесь, но это не работает для меня. Я использую этот код:

/ * Создать текстовый слой по запросу */

if (!_textLayer) {
    _textLayer = [[CATextLayer alloc] init];
    //_textLayer.font = [UIFont boldSystemFontOfSize:13].fontName; // not needed since `string` property will be an NSAttributedString
    _textLayer.backgroundColor = [UIColor clearColor].CGColor;
    _textLayer.wrapped = YES;
    //CALayer *layer = self.navigationController.toolbar.layer; //self is a view controller contained by a navigation controller
    _textLayer.frame = CGRectMake(5,325, 310, 90);
    _textLayer.contentsScale = [[UIScreen mainScreen] scale]; // looks nice in retina displays too :)
    _textLayer.alignmentMode = kCAAlignmentJustified;
    _textLayer.masksToBounds = YES;
    [self.view.layer addSublayer:_textLayer];
}

Внизу я также попытался добавить свой _textLayer к слою UITextView вместо self.view.layer.

Пожалуйста, предложите, как я могу достичь этой функции?

2 ответа

Решение

Вы можете просто добавить свой CATextLayer в UIScrollView и получить бесплатную прокрутку. Установите фрейм scrollview по мере необходимости и contentSize как ваш фрейм CATextLayer и добавьте его в слой scroll, что-то вроде этого (на самом деле не рабочий код):

UIScrollView* scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,100,100)];
CATextLayer* layer = [CATextLayer layer];
//layer init code goes here
scroll.contentSize = CGSizeMake(1000,1000);//or your actual text layer size
[scroll.layer addSublayer:layer];

и все готово! Не забудьте добавить прокрутку в качестве своего подпредставления просмотра.

Используйте метод NSString sizeWithFont:constrainedToSize: чтобы получить ограничивающий прямоугольник для вашего текста с заданным шрифтом, затем установите рамку слоя, используя этот размер:

NSString* myString = ....;
CGSize size =     [myString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(100, 100)];
_textlayer.frame = CGRectMake(0,0,size.width,size.height);

Только не забудьте использовать соответствующий размер шрифта / ограничения.

Другие вопросы по тегам