Как добавить функцию прокрутки в UILabel

В Xcode я создал UILabel, размер которого будет автоматически изменяться в зависимости от того, сколько строк текста я наложил на него. Но я не хочу, чтобы высота UILabel превышала определенный предел (240 в моем примере), код выглядит следующим образом:

NSString *text = @"imagine this is a huge wall of text\n\n\n"
UILabel *myLabel = [[UILabel alloc] init];
[myLabel setNumberOfLines:0];
CGSize labelSize = [text sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(280, 240) lineBreakMode:myLabel.lineBreakMode];
myLabel.frame = CGRectMake(0, 0, 280, labelSize.height);

Это отлично работает, когда мой текст занимает около 10-15 строк. Но если я вставлю что-то вроде 40 строк текста, лишние строки текста выйдут за пределы моего UILabel и будут обрезаны.

Как я могу добавить функцию прокрутки в myLabel, чтобы myLabel по-прежнему имел максимальную высоту 240, и я мог просто прокрутить вниз, чтобы просмотреть эти дополнительные строки текста в myLabel?


person Shakesbeer    schedule 23.01.2012    source источник
comment
возможно, это поможет stackoverflow.com/a/16860529/1463604   -  person Nishant    schedule 17.07.2014
comment
Из 26k пользователей, смотревших на этот вопрос, только 19 проголосовали за !! странно !!   -  person Amr Lotfy    schedule 03.12.2016


Ответы (2)


Используйте UITextView (справочник).

Он предназначен именно для этого. Отключите редактирование, и вы получите прокручиваемую метку.

person Peter Sarnowski    schedule 23.01.2012
comment
Имейте в виду, что UITextView не является заменой UILabel. Например (начиная с iOS 6), когда вы устанавливаете шрифт в UILabel с атрибутированным текстом, это изменение остается; когда вы устанавливаете шрифт в UITextView, изменение применяется только к тем атрибутам, которые уже есть в UITextView - если вы назначите новую строку с атрибутами, шрифт, который вы ранее установили, не будет отражен. (По крайней мере, это был мой опыт работы с этим сегодня вечером.) - person Jon Schneider; 11.09.2013
comment
@JonSchneider - UITextView по-прежнему подходит для использования сегодня? - person kemicofa ghost; 07.11.2016
comment
@rugdealer Боюсь, что я не могу сразу дать вам твердый ответ; Я не занимался серьезной разработкой для iOS с конца 2014 года. - person Jon Schneider; 07.11.2016

Вы можете добавить свой UILabel в UIScrollView. Вот так, а можно и так ---

scrollView.backgroundColor = [UIColor clearColor];

        UILabel * label = [[UILabel alloc] init];
        [label setNumberOfLines:0];
        label.text=[detailDict valueForKey:@"ABC"];
        [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]];
        CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap];
        int y=0;
        label.frame=CGRectMake(38, y, 245, labelsize.height);
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[UIColor whiteColor]];
        scrollView.showsVerticalScrollIndicator = NO;
        y+=labelsize.height;
        [scrollView setContentSize:CGSizeMake(200,y+50)];
        [scrollView addSubview:label];
        [label release];

Здесь Y используется для увеличения или уменьшения размера метки как текста.

person shivangi    schedule 23.01.2012
comment
Если у вас есть варианты получше, это всегда неверный путь. :( - person Munim Dibosh; 22.06.2013
comment
На самом деле это отличное решение для тех из вас, кто устал от растущего числа проблем с поведением прокрутки UITextView. Особенно в сочетании с прозрачными панелями навигации. Иногда прокручивается, иногда нет. Это решение работает там, где UITextView не работает. -рр - person Richie Hyatt; 04.11.2015