2011-01-06 14 views
9

Ho creato un UITableViewCell personalizzato in IB, collegandolo alla proprietà del controller di visualizzazione radice per esso e impostandolo in CellForRowAtIndexPath. Ma l'altezza delle mie celle disegnate non corrisponde a quello che ho impostato su IB, consiglio? Ecco alcuni screenshot e il codice. alt textAltezza pennino UITableViewCell height

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 è una @property (nonatomic, assegnare) IBOutlet UITableViewCell * addressCell ;, ed è collegato in IB per il proprietario del file (controllore vista tabella).

Sto utilizzando l'esempio della guida di programmazione di Apple view table.

+0

Segui questo link e ottenere risposta alla tua domanda - [ottenere l'altezza delle righe dal file NIB] [1] [1]: http://stackoverflow.com/a/18503213/2086991 – Aznix

risposta

6

è possibile regolare l'altezza della cella utilizzando:

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

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

Questo funziona con le cellule personalizzati.

+2

Peccato , Sapevo di heightForRowAtIndexPath ma speravo che l'utilizzo di una cella basata su NIB mi avrebbe permesso di evitare di doverlo utilizzare. Grazie! – Chuck

+3

Sto avendo lo stesso problema e la stessa domanda. Se impostiamo l'altezza della cella su IB, perché dovremmo impostarla anche in heightForRowAtIndexPath? – phi

+0

L'esempio di Apple di utilizzare celle personalizzate da pennino con altezze diverse utilizza anche una vista tabella basata su pennino che viene caricata dal controller. Sto indovinando (non l'ho testato) che l'utilizzo di [tableView dequeueReusableCellWithIdentifier:] causa l'altezza di default da utilizzare al posto delle impostazioni del pennino. – Chuck

5

Il delegate's -tableView:heightForRowAtIndexPath: method è un approccio, come dice WrightsCS. Un'altra opzione, se tutte le righe avranno la stessa altezza, è quella di impostare lo stesso rowHeight property of the table view. (Il primo ha il vantaggio di consentire di restituire valori arbitrari per ogni riga.)

+0

In realtà, se si definiscono le celle per modificare l'altezza, non saranno tutte della stessa altezza, quindi è sbagliato in tal senso. Il tuo diritto nel caso del mio esempio. – WrightsCS

+3

Eh? Questo era il mio punto: il metodo delegate consente alle file di essere diverse. Non sono nel tuo esempio, ma potrebbero * essere *. L'impostazione della proprietà 'rowHeight' non ti dà quell'opzione. –

1

Sto usando il seguente frammento. Altezza destra dal file del pennino.

- (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; 
} 

Non dimenticare di caricare voi cellule - (void) viewDidLoad

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

Ci sono due posti nel IB in cui è necessario impostare l'altezza della riga. Prima l'altezza della riga personalizzata per la cella stessa. Fare clic sulla cella che si desidera ridimensionare, quindi fare clic su Impostazioni dimensione (righello) nella finestra Utilità a destra. Imposta l'altezza della riga in alto nella sezione Cella vista tabella. Fai clic sulla casella di controllo Personalizzato. Quindi fare clic su Vista tabella nella finestra Struttura documento a sinistra. Torna alla finestra di ispezione delle dimensioni nella finestra Utilità a destra e imposta l'altezza della riga per l'intera tabella all'altezza desiderata.
Con questa implementazione non è necessario aggiungere alcun codice al proprio tableviewcontroller.

+1

Così ho impostato l'altezza della riga nel file di pennino e anche heightForRowAtIndexPath implemato. Poi ho passato 1 ora a battere la testa sul perché l'interfaccia utente stava impazzendo. È venuto fuori che avevo bisogno di impostare l'altezza nelle proprietà di tableView. Xcode fa schifo. Comunque grazie per la tua risposta! – Sikander

3

Questo è quello che faccio durante la creazione della vista tabella per garantire l'altezza della riga corrisponde l'altezza delle righe definito nel pennino della cellula:

- (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; 
} 

Spero che questo aiuta.

+0

Elegante e migliore approccio al problema imho – FredericK

Problemi correlati