2012-01-23 13 views
27

W Xcode, utworzyłem UILabel, który będzie autorezystować w zależności od tego, ile linii tekstu na nim włożę. Ale nie chcę height UILabel, aby przekroczyć pewnej granicy (240 w moim przykładzie), kod wygląda tak:jak dodać funkcję przewijania do UILabel'a

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

Działa to dobrze, gdy mój tekst jest w ciągu około 10-15 wierszy. Ale jeśli dodaję coś w rodzaju 40 linii tekstu, dodatkowe linie tekstu przekroczą moją UILabel i zostaną odcięte.

Jak dodać funkcję przewijania do myLabel, aby moja kolumna miała maksymalną wysokość 240, a ja po prostu przewiń w dół, aby wyświetlić dodatkowe wiersze tekstu w myLabel ??

+0

może to pomoże http://stackoverflow.com/a/16860529/1463604 – Nishant

+0

Od 26k użytkowników obejrzało to pytanie tylko 19 upvote !! wierd !! –

Odpowiedz

96

Użyj UITextView (reference).

Został zaprojektowany do tego. Wyłącz edycję i otrzymasz przewijaną etykietę.

+4

Należy pamiętać, że UITextView nie jest zastępczym zamiennikiem dla UILabel. Na przykład (od wersji iOS 6), kiedy ustawiasz czcionkę na UILabel z przypisanym tekstem, ta zmiana zmienia się na "stick"; kiedy ustawiasz czcionkę w UITextView, zmiana dotyczy tylko tego, co przypisano już w UITextView - jeśli przydzielisz nowy przypisany ciąg, czcionka, którą wcześniej ustawiłeś, nie zostanie odzwierciedlona. (To było moje doświadczenie w pracy z dzisiejszym wieczorem.) –

+1

@JonSchneider to UITextView nadal "właściwa" rzecz do wykorzystania dzisiaj? – rottenoats

+0

@rugdealer Obawiam się, że nie mogę dać ci solidnej odpowiedzi od ręki; Nie poczyniłem poważnego rozwoju na iOS od końca 2014 roku. –

1

Można dodać UILabel na UIScrollView tak i można również zrobić tak ---

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

Tutaj Y jest używany, aby zwiększyć lub zmniejszyć rozmiar etykiety jako tekst.

+1

Zawsze jest zły sposób robienia rzeczy, jeśli masz lepsze opcje. :( –

+0

Jest to doskonałe rozwiązanie dla tych, którzy mają już dość rosnącej liczby problemów związanych z przewijaniem UITextView, zwłaszcza gdy są pomieszane z przezroczystymi paskami nawigacji, a czasami przewijają, ale nie działa. UITextView nie będzie. -rrh –

Powiązane problemy