2011-01-01 15 views
31

Mam wbudowany moduł UIButton, który ma etykietę domyślną. W Xcode, ja zmieniając tekst etykiety dynamicznie tak:Tekst etykiety UIBUTTON jest obcięty

myButton.titleLabel.text = @"this is the new label"; 

Jednak, gdy aktualizacje tekstowe, nowy łańcuch jest przycięte do tego samego rozmiaru co oryginalny ciąg i kończy się patrząc jak:

this...label 

Ktoś wie, dlaczego tak się dzieje?

Odpowiedz

56

Powinieneś użyć setTitle:forState:, aby zmienić tytuł UIButton. Jeśli się zmienić tytuł, przycisk nie ma wskazania, że ​​musi zmienić rozmiar etykiety - skończyłbyś konieczności zrobić coś takiego:

myButton.titleLabel.text = @"this is the new label"; 
[myButton setNeedsLayout]; 

ale nie jestem nawet pewien, że będzie działać w wszystkie przypadki. Dostępne są takie metody, jak setTitle:forState:, dzięki czemu można udostępniać tytuły dla wielu stanów bez konieczności ręcznego aktualizowania przycisku, a przycisk informuje, że musi zostać utworzony nowy tytuł.

+1

Absolutnie. Właściwym sposobem na uzyskanie dynamicznego tekstu przycisku, aby zmienić rozmiar etykiety titleLabel, jest użycie setTitle: forState: –

5

Zadzwoń pod numer sizeToFit na swoim przycisku. Spowoduje to zmianę rozmiaru przycisku, aby dopasować go do tekstu.

1

Jeśli to nie zadziałało, zawsze możesz określić rozmiar ciągu i dostosować szerokość ramki przycisku. W takim przypadku jesteś pewien, że będzie pasował.

// Calculate the size 
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0] 
        constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap]; 

// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width 
18

Alternatywnym rozwiązaniem jest aby wewnętrzna UILabel w UIButton do kurczenia rozmiar czcionki, a UILabels potrafi:

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size 
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES; 
+0

, która jest jedyną rzeczą, która działa dla mnie ... przycisk nie jest rozciągnięty, ale przynajmniej możesz zobaczyć tekst: –

+4

Uwaga: 'minimumFontSize' jest teraz przestarzałe. Zamiast tego należy użyć 'minimumScaleFactor'. To znaczy. całkowicie przestać skalować, używając 'minimumScaleFactor = 1.0;' –

+0

To jest właściwa odpowiedź, w szczególności adjustsFontSizeToFitWidth jest metodą, której szuka OP. – Dado

22

Użyj sposób setTitle na przycisku (zamiast ustawiania tytułu bezpośrednio na etykieta). Powinien wymusić zmianę rozmiaru etykiety tytułu.

Cel C:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal]; 

Albo w Swift:

myButton.setTitle("This is the text", for: .normal) 
+0

+1 za idealną odpowiedź. Wypróbowałem wszystkie powyższe alternatywy. Ale nie mógłbym rozwiązać mojego problemu poza tą odpowiedzią. –

+0

zamiast wybranej najlepszej odpowiedzi, ta zadziałała idealnie! +1 –

+0

Zgadzam się. Ten powinien być zaakceptowany :) +1 –

Powiązane problemy