To jest na iPhonie 0S 2.0. Odpowiedzi na 2.1 też są w porządku, chociaż nie znam żadnych różnic dotyczących tabel.
Wydaje się, że powinno być możliwe zawijanie tekstu bez tworzenia niestandardowej komórki, ponieważ domyślnie UITableViewCell
zawiera UILabel
. Wiem, że mogę sprawić, że zadziała, jeśli utworzę niestandardową komórkę, ale nie o to próbuję - chcę zrozumieć, dlaczego moje obecne podejście nie działa.
Dowiedziałem się, że etykieta jest tworzona na żądanie (ponieważ komórka obsługuje dostęp do tekstu i obrazu, więc nie tworzy widoku danych, dopóki nie jest to konieczne), więc jeśli zrobię coś takiego:
cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];
wtedy otrzymuję prawidłową etykietę, ale ustawienie numberOfLines
na niej (i lineBreakMode) nie działa - nadal otrzymuję tekst jednowierszowy. W UILabel
tekście jest dużo wysokości do wyświetlenia - zwracam tylko dużą wartość wysokości w heightForRowAtIndexPath
.
źródło
Zaktualizowana odpowiedź Tima Rupe na iOS7:
źródło
Krótki komentarz / odpowiedź, aby nagrać moje doświadczenie, gdy miałem ten sam problem. Pomimo korzystania z przykładów kodu wysokość komórki widoku tabeli się dostosowywała, ale etykieta wewnątrz komórki nadal nie dostosowywała się poprawnie - rozwiązaniem było ładowanie komórki z niestandardowego pliku NIB, co dzieje się po dostosowaniu wysokości komórki.
Miałem swoje ustawienia wewnątrz pliku NIB, aby nie zawijać tekstu i miałem tylko 1 wiersz na etykietę; ustawienia pliku NIB zastępowały ustawienia, które dostosowałem w kodzie.
Lekcja, którą wziąłem, polegała na tym, aby zawsze pamiętać o stanie obiektów w każdym momencie - być może nie zostały jeszcze utworzone! ... ktoś na kolejce.
źródło
Jeśli mamy dodać tylko tekst w
UITableView
komórce, potrzebujemy tylko dwóch delegatów do pracy (nie ma potrzeby dodawania dodatkowychUILabels
)1)
cellForRowAtIndexPath
2)
heightForRowAtIndexPath
To rozwiązanie zadziałało dla mnie: -
Tutaj ciąg
mutArr
jest zmienną tablicą, z której pobieram dane.EDYCJA: - Oto tablica, którą wziąłem.
źródło
Teraz widoki tabeli mogą mieć komórki o rozmiarze samoczynnym. Ustaw widok tabeli w następujący sposób
tableView.estimatedRowHeight = 85.0 //use an appropriate estimate tableView.rowHeight = UITableViewAutomaticDimension
Referencje Apple
źródło
Używam następujących rozwiązań.
Dane są podawane osobno w ramach członka:
Obsługa może być łatwo wykonana
cellForRowAtIndexPath
. Zdefiniuj komórkę / zdefiniuj czcionkę i przypisz te wartości do wynikowej „komórki”. Zauważ, żenumberoflines
jest ustawione na „0”, co oznacza, że bierzesz to, co jest potrzebne.W programie
heightForRowAtIndexPath
obliczam wysokość zawiniętego tekstu. Rozmiar boding powinien być powiązany z szerokością twojej komórki. Dla iPada powinno to być 1024. Dla iPhone i iPod 320.źródło
Okazało się, że jest to dość proste i jednoznaczne:
na przykład:
Może to być najlepsze / standardowe podejście, ale w moim przypadku zadziałało.
źródło
Wypróbuj mój kod szybko. Ten kod będzie działał również dla zwykłych etykiet UIL.
Teraz dzwoń po prostu w ten sposób
źródło
Myślę, że to lepsze i krótsze rozwiązanie. Po prostu sformatuj
UILabel
(textLabel
) komórki, aby automatycznie obliczyć wysokość, określając jąsizeToFit
i wszystko powinno być w porządku.źródło
Nie sądzę, aby można było w tym celu manipulować
UITableViewCell's
prywatną baząUILabel
. Można dodać nowyUILabel
do celi siebie i skorzystaćnumberOfLines
zsizeToFit
wielkości to w odpowiedni sposób. Coś jak:źródło