Come ottenere un UITextView da ridimensionare automaticamente all'interno di un UITableViewCell
-
05-07-2019 - |
Domanda
Installazione: ho un UITextView
all'interno di UITableViewCell
di contentView
. Voglio che occupi l'intera dimensione della cella. Creo la visualizzazione del testo in questo modo:
UITextView *textView = [[[UITextView alloc] initWithFrame:CGRectMake(0,0,268,43)] autorelease];
textView.backgroundColor = [UIColor redColor];
textView.layer.cornerRadius = 10;
textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
E sovrascrivo heightForRowAtIndexPath per restituire 200 per quella riga.
Il colore di sfondo è solo così posso dire dove si trova. La cella sembra ridimensionarla automaticamente correttamente alla prima vista. Tuttavia, ne ho bisogno per continuare a ridimensionarlo correttamente durante l'autorotazione dell'interfaccia, che a volte sembra funzionare solo e solo quando non sto modificando TextView. Altre volte, ridimensiona la vista per avere un'altezza molto piccola (sembra -1), o la rende troppo ampia, o semplicemente non la ridimensiona affatto.
Ho provato a sovrascrivere layoutSubviews nella cella e semplicemente non fare nulla, ma anche questo non impedisce alla vista di ridimensionarsi dappertutto.
Sono stato a questo punto per un po 'di tempo ormai, ma non ho ancora trovato alcuna soluzione.
Soluzione
Un UITableViewCell ha un'altezza fissa, l'altezza fornita dal delegato di UITableView. Quando si ruota il dispositivo, l'altezza della riga non cambierà mai, a meno che non si chiami -reloadData
su tableView. Mi sbarazzerei dell'autoridimensionamento e lo gestivo da solo.
Quando si avvia textField, è possibile impostare facilmente la cornice su CGRectZero
. Quindi implementa -layoutSubviews
(e chiama super in quel metodo, prima impostando i frame delle tue subview) e imposta il frame di UITextField in base a contentRect proprietà della cella.
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if(self = [super ...]){ // or -initWithStyle:reuseIdentifier: whatever you want
_textView = [[UITextView alloc] initWithFrame:CGRectZero]; // Instance variable
// Probably not needed to set autoresizing mask
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
_textView.frame = CGRectMake(0.0f, 0.0f, self.contentRect.size.width, self.contentRect.size.height); // Adjust as needed
}