Comment obtenir une UITextView à redimensionner automatiquement dans une UITableViewCell

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

  •  05-07-2019
  •  | 
  •  

Question

Configuration: J'ai un UITextView dans un UITableViewCell du contentView . Je veux qu'il prenne toute la taille de la cellule. Je crée la vue texte comme suit:

UITextView *textView = [[[UITextView alloc] initWithFrame:CGRectMake(0,0,268,43)] autorelease];
textView.backgroundColor = [UIColor redColor];
textView.layer.cornerRadius = 10;
textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Et je substitue heightForRowAtIndexPath pour retourner 200 pour cette ligne.

La couleur de fond est juste pour que je puisse dire où elle se trouve. La cellule semble automatiquement la redimensionner correctement lors de la première visualisation. Cependant, j’en ai besoin pour continuer à le redimensionner correctement tout en effectuant une autorotation de l’interface, ce qui semble ne fonctionner que parfois, et uniquement lorsque je ne modifie pas le textView. D'autres fois, il redimensionne la vue pour qu'elle ait une très petite hauteur (ressemble à -1), ou la rend trop large, ou ne la redimensionne même pas du tout.

J'ai essayé de remplacer layoutSubviews dans la cellule et je ne fais rien, mais même cela n'empêche pas la vue de redimensionner partout.

Cela fait un moment que je corrige cet inconvénient, mais je n'ai toujours pas trouvé de solution.

Était-ce utile?

La solution

Un UITableViewCell a une hauteur fixe, hauteur fournie par le délégué de UITableView. Lorsque vous faites pivoter votre appareil, la hauteur de la ligne ne changera jamais, sauf si vous appelez -reloadData sur votre tableView. Je me débarrasserais de l'auto-dimensionnement et le gérerais vous-même.

Lorsque vous lancez votre textField, vous pouvez facilement définir le cadre sur CGRectZero . Puis implémentez -layoutSubviews (et appelez super dans cette méthode, avant en définissant les cadres de vos sous-vues) et définissez le cadre de UITextField conformément à contentRect propriété de la cellule.

- (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
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top