Come ottenere un UITextView da ridimensionare automaticamente all'interno di un UITableViewCell

StackOverflow https://stackoverflow.com/questions/1603705

  •  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.

È stato utile?

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
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top