2009-05-23 6 views
23

Na iPhonie, jak można określić szerokość widoku zawartości komórki widoku tabeli, gdy wyświetlany jest określony widok akcesoriów (wskaźnik ujawnienia itp.)?Zawartość UITableViewCell Szerokość widoku z danym typem akcesorium

Potrzebuję tego, aby obliczyć prawidłową wysokość komórki dla komórek zawierających zawijanie tekstu o zmiennej długości. Ale gdy delegat widoku tabeli jest pytany o wysokość komórki, nie ma rzeczywistej instancji komórki, więc nie może bezpośrednio zapytać o granice widoku treści.

Mogę z łatwością zakodować po prawej stronie margines 20-pikselowy, który wydaje się być dokładny dla zwykłego widoku tabeli stylu w orientacji pionowej ze wskaźnikiem ujawnienia, ale wolałby zrobić to w prawidłowy sposób, aby zachować działa, jeśli Apple zdecyduje się poprawić margines.

(Wiąże się to this question.)

Odpowiedz

2

Osobiście po prostu twardo zakodowałbym wartości - prostsze i rzeczy będą pękać w przewidywalny sposób.

Ale gdybym to zrobił programowo, utworzyłbym UITableViewCell, skonfigurowałam właściwości edycji/akcesoriów, które trzeba zmierzyć, a następnie zapytałam, jak duży jest jego contentView.

Oczywiście prawdopodobnie będę to w dużym stopniu buforował - przydział alokacji, gdy pytam UITableView prosi cię o informację o wysokości, brzmi jakbym był wolny (najpierw sprawdź z profilerem, jak zawsze).

+0

Tak, skończyłem na twardym kodowaniu tego (to 20 pikseli). Wydaje mi się, że próbowałem stworzyć sztuczną komórkę, tak jak opisałeś ją podczas pierwszej próby, a jeśli dobrze pamiętam, to nie zadziałało. Myślę, że układ jest ustawiany tylko wtedy, gdy komórka jest faktycznie wyświetlana w widoku tabeli. –

+0

No cóż! Cieszę się, że znalazłeś rozwiązanie. –

0

musiałbym podklasę UITableViewCell, który posiada wszystkie jego elementy podrzędne. Możesz przejść do ramki pewnych elementów, gdy komórka wejdzie w tryb edycji i istnieje. Jest to dobry przykład w przewodniku po programowaniu Apple View Table pod sekcją o tworzeniu niestandardowej komórki widoku tabeli.

0

Uważam, że właściwość contentView o nazwie UITableViewCell to widok zawierający etykiety itp., Więc szerokość tego powinna być dostępna do wykorzystania.

+0

Problem polega na tym, że delegat widoku tabeli musi znać wysokości komórek, które nie są widoczne, a zatem nie ma rzeczywistej instancji komórki, z której można pobrać contentView. Przypuszczam, że mogę po prostu uzyskać _a_ widoczną zawartość contentView komórki i założyć, że wszystkie inne komórki będą miały taką samą szerokość contentView. –

+0

Możesz spróbować po prostu usunąć metodę wysokości od delegata, a następnie ustawić wysokość podczas konfigurowania komórki, używając metody w UITableView –

+0

@Ed - to nie zadziała, ponieważ delegat widoku tabeli musi przekazać widok tabeli wysokość wszystkich komórek, nawet przed ich ustawieniem, aby widok przewijania uzyskał prawidłowe wymiary. –

Powiązane problemy