5

Czy muszę ustawić heightForRowAtIndexPath, jeśli używam niestandardowego UITableViewCell? W moim NIB już ustawiłem wysokość komórki.Czy muszę ustawić heightForRowAtIndexPath, jeśli używam niestandardowego UITableViewCell?

Po przekroczeniu wysokości oknaForRowAtIndexPath zawartość mojej komórki nie jest wyświetlana, mimo że jest ustawiona na wysokość zdefiniowaną w NIB.

Jeśli nie przekroczę wartości heightForRowAtIndexPath, zawartość komórki zostanie wyświetlona, ​​ale wystąpi przepełnienie, ponieważ domyślna wysokość nie jest wystarczająco duża.

Odpowiedz

12

Jeśli wszystkie twoje wiersze mają taką samą wysokość, możesz ustawić właściwość rowHeight swojej UITableView zamiast implementacji tableView:heightForRowAtIndexPath:. Jeśli masz rzędy o różnych wysokościach, musisz wdrożyć tableView:heightForRowAtIndexPath:.

Żadna z tych metod nie zwróci automatycznie wysokości komórki zdefiniowanej w NIB, ponieważ zostaną one wywołane przed rozpoczęciem konstruowania komórek w tableView:cellForRowAtIndexPath:.

Aby użyć wysokości komórki zdefiniowanej w karcie NIB, zalecamy zdefiniowanie niestandardowej właściwości kontrolera o nazwie prototypeCell, która będzie zawierać pojedynczą komórkę, która nigdy nie zostanie wyświetlona na stole. W tableView:heightForRowAtIndexPath: sprawdź, czy prototypeCell jest zerowe. Jeśli tak, zainicjuj go ze swojego NIB. Następnie zwróć prototypeCell.frame.size.height.

+2

+1 Świetne wykorzystanie wzoru wzoru prototypu! –

+0

W jaki sposób inicjujesz prototypeCell? Czy używasz 'initWithStyle: reuseIdentifier:'? Jeśli użyję tego, to 'prototypeCell.frame.size.height' zwraca domyślną wysokość (44), a nie wysokość zdefiniowaną w XIB. – kraftydevil

+0

Obciążenie końcówki może ją zainicjować i zawiera poprawną wysokość. Możesz zarejestrować stalówka dla komórki lub odwzorować prototypową komórkę na IBOutlet w Xib twojego kontrolera. –

Powiązane problemy