2011-01-06 13 views
9

Stworzyłem niestandardową UITableViewCell w IB, połączyłem ją z właściwością kontrolera widoku root i ustawiłem ją w CellForRowAtIndexPath. Ale wysokość moich narysowanych komórek nie pasuje do tego, co ustawiłem w IB, porady? Oto kilka zrzutów ekranu i kod. alt textWłasna stalówka UITableViewCell wysokość

alt text

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     static NSString *AddressCellIdentifier = @"AddressCellIdent"; 

    UITableViewCell *thisCell = [tableView dequeueReusableCellWithIdentifier:AddressCellIdentifier]; 
    if (thisCell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"AddressCell" owner:self options:nil]; 
     thisCell = addressCell; 
     self.addressCell = nil; 
    } 

    return thisCell ; 
} 

addressCell jest @property (nonatomic przypisać) IBOutlet UITableViewCell * addressCell ;, i wiąże się w IB do właściciela pliku (widok kontrolera tabela).

Używam przykładu z przewodnika programowania widoku tabeli Apple.

+0

Śledź ten link i uzyskać odpowiedzi na swoje pytanie - [dostać wysokości wiersza z pliku NIB] [1] [1]: http://stackoverflow.com/a/18503213/2086991 – Aznix

Odpowiedz

6

Można regulować wysokość komórki za pomocą:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    CGFloat result; 
    result = 120.0f; 
    return result; 
} 

ta będzie współpracować z własnych komórek.

+2

Szkoda , Wiedziałem o heightForRowAtIndexPath, ale miałem nadzieję, że użycie komórki opartej na NIB pozwoliłoby mi uniknąć konieczności jej używania. Dzięki! – Chuck

+3

Mam ten sam problem i to samo pytanie. Jeśli ustawimy wysokość komórki na IB, dlaczego mamy ustawić ją również w heightForRowAtIndexPath? – phi

+0

Przykład Apple używania niestandardowych komórek z końcówki o różnych wysokościach również używa widoku tabeli opartego na nib, który jest ładowany przez kontroler. Zgaduję (nie przetestowałem tego), że użycie [tableView dequeueReusableCellWithIdentifier:] powoduje użycie domyślnej wysokości zamiast ustawień stalówki. – Chuck

5

Jednym podejściem jest delegate's -tableView:heightForRowAtIndexPath: method, jak mówi WrightsCS. Inną opcją, jeśli wszystkie wiersze będą tej samej wysokości, jest ustawienie samego siebie. (Ta pierwsza ma tę zaletę, że pozwala zwracać dowolne wartości dla każdego wiersza.)

+0

Właściwie, jeśli zdefiniujesz, które komórki mają zmienić wysokość, nie wszystkie będą miały taką samą wysokość, więc twoje zło w tym sensie. Twoje prawo w przypadku mojego przykładu. – WrightsCS

+3

Huh? Taka była moja uwaga: metoda delegatów pozwala różnym wierszom. Nie są na twoim przykładzie, ale mogą * być *. Ustawienie właściwości 'rowHeight' nie daje tej opcji. –

1

Używam poniższego fragmentu. Wysokość od pliku nib.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (indexPath.row == 0) { 
     return self.cell0.contentView.bounds.size.height; 
    } 
    if (indexPath.row == 1) { 
     return self.cell1.contentView.bounds.size.height; 
    } 
    if (indexPath.row == 2) { 
     return self.cell2.contentView.bounds.size.height; 
    } 

    return 44.0; 
} 

Nie zapomnij załadować ci komórek w - (void) viewDidLoad

[[NSBundle mainBundle] loadNibNamed:@"YourView" owner:self options:nil]; 
7

Istnieją dwa miejsca w IB, gdzie trzeba ustawić wysokość wiersza. Najpierw niestandardowa wysokość wiersza dla samej komórki. Kliknij komórkę, której rozmiar chcesz zmienić, a następnie kliknij kontroler Rozmiar (miarka) w oknie Narzędzia po prawej stronie. Ustaw wysokość wiersza u góry pod sekcją Widok tabeli. Kliknij pole wyboru Niestandardowe. Następnie kliknij widok tabeli w oknie Konspekt dokumentu po lewej stronie. Wróć do kontrolera rozmiaru w oknie Narzędzia po prawej stronie i ustaw wysokość wiersza dla całego stołu na żądaną wysokość.
Dzięki tej implementacji nie trzeba dodawać żadnego kodu do sterownika tableviewcontroller.

+1

Ustawiłem więc wysokość wiersza w pliku nib, a także zaimplementowałem heightForRowAtIndexPath. Potem spędziłem godzinę, pokonując moją głowę, dlaczego interfejs użytkownika szaleje. Okazuje się, że muszę ustawić wysokość również w właściwościach tableView. Xcode jest do bani wielki czas. W każdym razie dziękuję za odpowiedź! – Sikander

3

To co mam zrobić podczas tworzenia widoku tabeli, aby upewnić się, że wysokość wiersza odpowiada wysokości wiersza zdefiniowanego w stalówkę komórki:

- (UITableView *)tableView 
{ 
    if (_tableView == nil) { 
     _tableView = [[UITableView alloc] 
         initWithFrame:self.view.bounds 
         style:UITableViewStylePlain]; 
     _tableView.dataSource = self; 
     _tableView.delegate = self; 

     [_tableView 
     registerNib:[UINib nibWithNibName:@"<CELL NIB NAME>" bundle:nil] 
     forCellReuseIdentifier:kCellIdentifier]; 

     // Get the cell's root view and set the table's 
     // rowHeight to the root cell's height. 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"<CELL NIB NAME>" 
                owner:self 
                options:nil]; 
     UIView *cellView = (UIView *)nib[0]; 
     if (cellView) { 
      _tableView.rowHeight = cellView.bounds.size.height; 
     }   
    } 
    return _tableView; 
} 

Mam nadzieję, że to pomaga.

+0

Eleganckie i najlepsze podejście do problemu imho – FredericK

Powiązane problemy