2009-06-18 1 views
15

Voglio ridimensionare l'altezza della cella in base all'altezza dell'etichetta e all'altezza dell'etichetta in base al testo. O c'è un modo per ridimensionare l'altezza della cella in base al testo inserito in UITextView?Ridimensiona dinamicamente UITableViewCell nell'altezza di UILabel

+0

Stai dicendo di voler ridimensionare un UITableViewCell contenente un UITextView man mano che più testo viene inserito nella visualizzazione del testo? – teabot

+0

no signore, ho una cella personalizzata con l'etichetta sulla cella. Il testo proviene dal database. come aumentare l'altezza della riga della cella e non etichettare nessuna riga o altezza etichetta in modo che il testo lungo possa essere inserito nell'etichetta della cella –

+0

possibile duplicato di [Altezza UITableCellView variabile con sottoview] (http://stackoverflow.com/questions/128012/ variable-uitablecellview-height-with-subview) – outis

risposta

17

QUESTO METODO È DEPRECATO DAI iOS 7.0.

C'è un metodo delegato UITableView chiamato heightForRowAtIndexPath che viene chiamato prima di creare una cella o una tabella.

è possibile utilizzare il NSIndexPath passata ad essa per ottenere il testo in una riga specifica e utilizzare il metodo sizeWithFont da UIStringDrawing.h per calcolare un CGSize per quella riga.

Ad esempio:

CGSize size = [text sizeWithFont:font 
        constrainedToSize:maximumLabelSize 
        lineBreakMode:UILineBreakModeWordWrap]; 

E infine si sarebbe tornare size.height.

+3

Questo metodo è stato deprecato in iOS7. – mskw

6

--Per iOS7--

Basandosi questo fuori della risposta di Josh Vera ... collocare questo in heightForRowAtIndexPath.

Ho i dati della mia tabella memorizzati in un NSArray * tableData.

// set the desired width of the textbox that will be holding the adjusted text, (for clarity only, set as property or ivar) 
CGFloat widthOfMyTexbox = 250.0; 

-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Get a reference to your string to base the cell size on. 
    NSString *cellText = [self.tableData objectAtIndex:indexPath.row]; 
    //set the desired size of your textbox 
    CGSize constraint = CGSizeMake(widthOfMyTextBox, MAXFLOAT); 
    //set your text attribute dictionary 
    NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:14.0] forKey:NSFontAttributeName]; 
    //get the size of the text box 
    CGRect textsize = [cellText boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; 
    //calculate your size 
    float textHeight = textsize.size.height +20; 
    //I have mine set for a minimum size 
    textHeight = (textHeight < 50.0) ? 50.0 : textHeight; 

    return textHeight; 
} 

non l'ho provato per iOS < 7, ma credo che dovrebbe funzionare per quello.

+0

puoi spiegare a cosa si riferisce widthOfMyTextBox? – Scratcha

+0

Scratcha vedi risposta aggiornata. È la larghezza che vuoi che sia la tua casella di testo. – digitalHound