2012-06-08 13 views
6

mam problem udziałem UILabel „s sizeToFit metody:rozmiar UILabel dopasować

UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,320)]; 
questionLabel.lineBreakMode = UILineBreakModeWordWrap; 
questionLabel.backgroundColor=[UIColor clearColor]; 
questionLabel.textAlignment=UITextAlignmentLeft; 
questionLabel.textColor=[UIColor blackColor]; 
questionLabel.tag=1; 
questionLabel.font=[UIFont systemFontOfSize:13]; 
questionLabel.numberOfLines = 0; 
[questionLabel sizeToFit]; 
[myView addSubview:questionLabel]; 

Napisałem ten kod do wyświetlania moich danych. Ale jeśli napiszę: [questionLabel sizeToFit] moje dane nie są wyświetlane poprawnie. Jeśli usuniemy [questionLabel sizeToFit], wyświetli się, ale pokazuje tylko połowę danych.

Dzięki i Pozdrawiam.

+0

dlaczego ustawiasz liczbę linii jako 0 statycznie? Zamiast tego można obliczyć szerokość lub wysokość lub obie, używając rozmiaru czcionki, inicjując przy pomocy CGRectZero. – Tarun

+0

dzięki za udzielenie odpowiedzi. Czy możesz wyeksmitować powyższe zdanie, wyraźnie – fayaz

+1

Cóż, wiem, że jestem spóźniony, ale może to pomaga: "sizeToFit" nie działa z "UILabel" z wieloma liniami. Możesz użyć "UITextView", ale musisz mieć pewność, że rozmiar tekstu jest większy niż potrzeba. W ten sposób: ustaw wysokość widoku = 'MAXFLOAT', a następnie wywołaj "sizeToFit". Jeśli chcesz zachować etykietę, musisz użyć metody "sizeWithFont: constrainedToSize: lineBreakMode:". Mam nadzieję że to pomoże. Twoje zdrowie! – George

Odpowiedz

-1

tylko upewnij się zwiększyć liczbę wierszy na etykiecie. Zamiast

questionLable.numberOfLines = 0; wykorzystują

questionLable.numberOfLines = 4; Jak zmusić system do obliczania najmniejszą możliwą do 4 linii szerokość.

Można to osiągnąć za pomocą pliku XIB też ..

+0

Problem polega na tym, że nie widzę danych. Jeśli napiszę [questionLable sizeToFit] – fayaz

16
NSString *yourString = @"write your label text here"; 
CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 
questionLabel.frame = CGRectMake(0, 0, s.width, s.height); 

Sprawdź, czy to pomaga.

+0

To już nie działa w iOS 8, a metoda ta została zaniechana – chandhooguy

+0

Używaj NSLineBreakByWordWrapping zamiast UILineBreakModeWordWrap która jest nieaktualna! :) – MasterRazer

+0

sizeWithFont: jest teraz przestarzała - tak to już się nie zgadza – AppHandwerker

0

google D powyżej problemu i natknęła się na informacji, że sizeToFit wydaje się być błąd i zostało już zgłoszone jabłka. Więc jako obejście u można użyć tego kodu:

NSString * myText = [NSString stringWithString:@"some text"]; 

CGFloat constrainedSize = 265.0f; 

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; 

CGSize textSize = [myText sizeWithFont: myFont 
         constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX) 
          lineBreakMode:UILineBreakModeWordWrap]; 



CGRect labelFrame = CGRectMake (0, 0, textSize.width, textSize.height); 

UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 

[label setFont:myFont]; 

[label setText:myText]; 
+0

Dzięki za utrzymanie wysiłku, ale nadal ten sam problem nadchodzi – fayaz

2

myślę, że najlepiej użyć taony-iDeveloper odpowiedź do obliczenia wielkości etykiety.
Chcę tylko powiedzieć, że powodem Twój kod nie działa to, bo nie ustawić tekst do UILabel tak sizeToFit zwraca CGSizeZero (dlatego nie pojawia się na ekranie). Musisz ustawić tekst przed użyciem sizeToFit.

2

stwierdziliśmy, że jeśli autoLayout jest następnie dopasować do rozmiaru nie działa

+0

ów wielki, jego pracy – Vishal

0

odkryłem, że podczas korzystania sizeToFit z UILabel w InterfaceBuilder trzeba zmienić właściwość autoshrink z „Fixed font size” do ' Minimalny rozmiar czcionki ". Zazwyczaj ustawię jego wartość na 0,5, aby mieć pewność, że działa prawidłowo.

Powiązane problemy