Le seul problème que j'ai trouvé avec l'acceptées réponse est que nous sommes attribution de la UITextView à chaque fois. J'ai trouvé que cela soulevait des problèmes avec la saisie dans la vue et d'avoir le texte de la mise à jour immédiatement et aussi garder la vue en tant que premier répondant. Quand j'ai essayé de recharger la cellule avec la nouvelle hauteur, il serait alors essayez d'ajouter un nouveau textView.
Parce que de ce que j'ai trouvé une méthode légèrement différente pour atteindre le même but. Nous espérons que cette prise différente pourrait aider les gens qui ont de la difficulté à mettre en œuvre le code ci-dessus.
1) Dans le fichier d'en-tête de définir une variable pour la hauteur du texte et le textView:
UITextView * _textView;
NSInteger _textHeight;
Définition d'une variable signifie que nous pouvons nous charger de la vue à une certaine hauteur, si nous sommes le chargement du texte dans le textView et réduit également la complexité.
2) Charger le texte de la vue et de l'ajouter à notre cellule
_textView = [[UITextView alloc] init];
_textView.delegate = self;
_textView.returnKeyType = UIReturnKeyDone;
_textView.font = [UIFont fontWithName:@"Helvetica" size:16];
if (![_user metaStringForKey:bBioKey].length) {
_textView.text = @"Placeholder text";
_textView.textColor = [UIColor lightGrayColor];
}
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath == 0) { // Add logic to choose the correct cell
if (_textView.superview != cell) {
[cell addSubview:_textView];
_textView.keepTopInset.equal = KeepRequired(7);
_textView.keepBottomInset.equal = KeepRequired(7);
_textView.keepRightInset.equal = KeepRequired(10);
_textView.keepLeftInset.equal = KeepRequired(70);
}
}
}
}
À l'aide de keeplayout nous a permis de garder notre textfield pour toujours rester à la même hauteur que la cellule. Nous sommes également à seulement jamais l'ajout de notre UITextView une fois.
3) Ajouter le code pour calculer la hauteur du texte
- (NSInteger)getHeightOfBio: (NSString *)text {
UILabel * gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
gettingSizeLabel.text = text;
gettingSizeLabel.numberOfLines = 0;
CGSize maximumLabelSize = CGSizeMake(240, 9999); // this width will be as per your requirement
CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];
return expectedSize.height;
}
J'ai essayé beaucoup et trouvé que c'était le meilleur
4) Ajoutez un peu de logique dans la hauteur de la cellule de rendre l'utilisation de ce:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) { // Set the height for our changing textView
return 30 + [self getHeightOfBio:_textView.text];
}
return 44;
}
Évident, nous avons besoin d'un peu plus de hauteur que notre texte de hauteur, alors j'ai ajouté un coussin supplémentaire montant qui peut être expérimenté.
5) l'Actualisation de la vue à chaque fois qu'un caractère est tapé pour vérifier si nous avons besoin d'augmenter la taille:
- (void)textViewDidChange:(UITextView *)textView {
if ([self getHeightOfText:textView.text] != _textHeight) {
_textHeight = [self getHeightOfText:textView.text];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
}
Dans cette section, nous obtenons la hauteur du texte à chaque fois que l'utilisateur tape.
Ensuite, si nous utilisons notre valeur stockée et de comparer la valeur actuelle de la valeur stockée. Évidemment, si ils sont le même, alors il n'y a pas de point dans l'actualisation de la vue. Si ils sont différents de nous mettre à jour la valeur, puis actualiser notre table.
Ce peu, j'ai trouvé une bonne réponse sur stackOverflow montrant comment nous pouvons actualiser uniquement les hauteurs de la table au lieu de la cellule elle-même. Pourquoi actualiser la cellule lorsque nous n'avons pas besoin? Cela signifie qu'une fois que cela s'appelle la hauteur de la cellule est mise à jour et il augmente bien.
De toute façon, j'ai trouvé que ça fonctionnait très bien et était assez simple qui peut être mis en place ou ont les différentes parties et de les mettre dans d'autres peuples morceaux de code.
Accessoires pour la accepté de répondre à ce qui a été pillé pour diverses pièces le long du chemin, mais j'espère aussi que cela permet de répondre à certaines personnes qui ont les mêmes difficultés que j'ai eu.