2014-11-30 21 views
5

Mam UILabel w mojej podklasie Cell, która ma posiadać tytuł. Rozmiar tytułu może być różnej długości i dlatego potrzebuję zmienić rozmiar UILabel, aby zmieścił się w tekście i zapobiec temu, że tekst nie jest zbyt długi. Muszę też móc ustawić maxHeight. Szerokość powinna być taka sama. Jak mogę utworzyć taki kod w sposób szybki w podklasie tableViewCell?Zmiana rozmiaru UILabel w celu dopasowania tekstu

tej pory mam to w awakeFromNib

theTitleLabel?.font = UIFont(name: "HelveticaNeue", size: 13) 
    theTitleLabel?.textColor = UIColor(rgba: "#4F4E4F") 
    theTitleLabel?.numberOfLines = 0 
    theTitleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail 
+0

Co na temat korzystania z systemu Ograniczenie (autolayout)? Projektowanie komórki w Interface Builder znacznie uprości problem. – Sulthan

Odpowiedz

4

Najprostszym sposobem na to jest za pomocą autolayout ograniczeń. Używasz awakeFromNib, więc zakładam, że masz tę komórkę gdzieś w Konstruktorze interfejsów (xib lub plik scenorysu).

Jeśli możesz tego uniknąć, nigdy nie ustawiaj swoich widoków w swoim kodzie. Znacznie łatwiej jest to zrobić w narzędziu do tworzenia interfejsu.

  1. Znajdź swoją etykietę i skonfigurować jego atrybutów (czcionka, kolor, tryb przerwa linia itp) w konstruktorze Interface.

  2. Dodaj wiązanie szerokości (lub wiązań do lewego i prawego marginesu, w zależności od tego, co chcesz).

  3. Dodaj ograniczenie wysokości, zmień jego relację z = (equals) na < (less than).

Gotowe, kod nie jest potrzebny.

6
CGSize maximumLabelSize = CGSizeMake(MAX_WIDTH, MAX_HEIGHT); 
    CGSize expectedSize = [lbl sizeThatFits:maximumLabelSize]; 

    CGSize s = CGSizeMake(STATIC_WIDTH, expectedSize.height); 
    yourLabel.frame = CGRectMake(yourLabel.frame.origin.x, nameLbl.frame.origin.y, s.width, s.height); 
+0

Dziękuję bardzo, to jedyna odpowiedź, która sprawdziła się u mnie. –

3

Swift 2 wersja z odpowiedzią Zigglzworth za:

let maximumLabelSize = CGSizeMake(maxWidth, maxHeight); 
let expectedSize = theLabel.sizeThatFits(maximumLabelSize) 

theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedSize.width, expectedSize.height) 
-1
let lblMassage = UILable()   
lblMassage.text ="Resizing the height of UILabel to fit text.................." 
lblMassage.numberOfLines = 0 
lblMassage.lineBreakMode = NSLineBreakMode.byTruncatingTail 
lblMassage.preferredMaxLayoutWidth = 190 
lblMassage.sizeToFit() 
Powiązane problemy