2015-03-24 24 views
5

Posiadam UITableView z niestandardowym UITableViewCell zaprojektowanym do automatycznego wzrostu.UITableWyświetl zmiany zachowań w dziwnym układzie podczas przewijania

Zachowanie polega na tym, że w pierwszym załadowaniu mojego UIViewController z UITableView wyświetla moje etykiety z częściowymi tekstami. Następnie, gdy przewijam do dołu, a następnie przewijam do góry, uzyskuję pożądany wygląd wysokości i tekstów.

Oto zrzuty ekranu:

początkowy wygląd kontrolera widoku:

enter image description here

Oto spojrzenie po przewinięciu dno następnie górna (Jest to poprawne spojrzenie na mój realizacji jakiś tekst Lorem zostanie usunięty przeze mnie):

enter image description here

Edycja 1:

Kod:

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 101 // much heigher than most cells. But no use. 

W UI Builder, w UITableViewCell za "height Row" ustawioną na "Default" (Niestandardowe nie zaznaczone)

W UI Builder UITableView na „Wzrost Row” ustawiony na „101” (również próbował ustawić go w pozycji „0”, ale sam wynik).

Odpowiedz

4

Pierwsze układ auto do pracy na UITableViewCell jest zapewnienie masz ograniczeń przypiąć każdy podrzędny ze wszystkich stron - że to, że każde wyeksponowanie powinno mieć ograniczenia wiodące, górne, końcowe i dolne.

Co więcej, potrzebujesz wyraźnej linii ograniczeń, przechodząc od góry do dołu contentView. Dzięki temu układ automatyczny prawidłowo określa wysokość contentView na podstawie jego subviews.

Trudnym elementem jest to, że Interface Builder często nie ostrzega, jeśli brakuje niektórych z tych ograniczeń; Układ automatyczny po prostu nie zwraca prawidłowych wysokości podczas uruchamiania projektu. Na przykład może zwrócić 0 dla wysokości komórki, co jest wskazówką, że twoje ograniczenia wymagają więcej pracy.

Jeśli napotkasz problemy podczas pracy z własnymi projektami, spróbuj dopasować swoje ograniczenia, dopóki nie zostaną spełnione powyższe kryteria.

check link do szczegółów: http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift

+0

Samouczek pod warunkiem (o którym już wiem) rozwiązał go, odtworzyłem nową prototypową komórkę i postępowałem zgodnie z samouczkiem oraz dodałem "UIImageView" wszystko jest w porządku. Próbowałem znaleźć swój błąd, sprawdzając wszystkie właściwości mojej komórki niestandardowej i niestandardową komórkę z samouczka. Nie mogłem znaleźć, co jest nie tak. Dziękuję Ci. – malhobayyeb

0

myślę, że można użyć heightForRowAtIndexPath metodę

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    var heightToReturn : CGFloat = 0 

    heightToReturn = StringUtil.findHeightForText("your text", havingWidth: "your label width" , andFont: UIFont.systemFontOfSize("font size")) + // add some buffer for padding 

    if heightToReturn < 101 
    { 
     heightToReturn = 101 
    } 
    return heightToReturn 
    } 

} 

i używać tej metody do obliczania wysokości tekstu

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { 
CGFloat result = font.pointSize+4; 
if (text) { 
    CGSize size; 

    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) 
             options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:@{NSFontAttributeName:font} 
             context:nil]; 
    size = CGSizeMake(frame.size.width, frame.size.height+1); 
    result = MAX(size.height, result); //At least one row 
} 

return result; 

}

+0

Jak zdobyć szerokość mojego etykiety na 'heightForRowAtIndexPath' który najwyraźniej jest wywoływana przed' cellForRowAtIndexPath' która tworzy moją komórkę? – malhobayyeb

+0

Działa to dla etykiet o stałej szerokości. – toofani

+0

Rozwiązałem go, podążając za odpowiedzią innego użytkownika, jednak zawsze bałam się dotknąć 'heightForRowAtIndexPath' Uważam, że jest bardzo zaawansowany, ale okazuje się być podstawowym. Dzięki Ci. – malhobayyeb

Powiązane problemy