Può la risposta essere semplice come prima convocazione [super layoutSubviews]
all'interno metodo vostra UITableViewCell
di sottoclasse layoutSubviews
?
Ecco il mio codice.
prima cosa creare il UITextField
e inserirlo al contentView
nel metodo initWithStyle:
:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
inputField = [[UITextField alloc] initWithFrame:CGRectZero];
[self.contentView addSubview:inputField];
inputField.borderStyle = UITextBorderStyleLine;
[inputField release];
}
return self;
}
Poi nel layoutSubviews, ho questo:
-(void)layoutSubviews
{
inputField.frame = CGRectMake(5, 5, 100, 20);
}
Con questo codice, il testo il campo è 5px a sinistra dello schermo, che è, ovviamente, 5px a sinistra della cella della tabella quando è in modalità raggruppata. In altre parole, ESTERNO della cella di visualizzazione tabella. Non buono.
Utilizzare questo codice e l'inputField
è posto 5px alla destra della cella, come voglio che sia:
-(void)layoutSubviews
{
[super layoutSubviews]; // the magic line
inputField.frame = CGRectMake(5, 5, 100, 20);
}
ho potuto avere totalmente frainteso il problema si dovesse avere, però!
Erik
fonte
2011-02-27 19:28:05
Il problema è UITableView in modalità raggruppati taglia parti delle cellule (i lati, per rivelare lo sfondo e arrotonda anche gli angoli della parte superiore e cellule inferiore di una sezione). – jbrennan
Sì, questo è il problema. –
Dopo alcuni test, hai ragione che le celle della vista tabella non vengono passate nella dimensione corretta in drawRect. Un approccio alternativo è quello di impostare un backgroundView personalizzato per un UITableViewCell standard, e fare tutto il tuo disegno lì. Ottieni una cella della larghezza giusta ma devi disegnare correttamente gli angoli superiore e inferiore arrotondati. –