J'ai un peu d'une configuration difficile dans mon storyboard, j'ai un UIViewController qui tient un UITableViewController. Dans UITableViewController, j'ai plusieurs prototypecells que j'ai liées à des objets de sous-classe uitableviewcell dans le code.
En utilisant des contraintes et un story-board, je voudrais changer la hauteur de ma cellule prototype en fonction de la taille que UILabel finit par être, laquelle dépend du texte qui y est inséré.
Actuellement j'ai un
UIViewController
-- UITableViewController
-- -- UITableViewCell ((melchat) prototype cell)
-- -- -- ContentView
-- -- -- -- UIView ((background) view with drop shadow card type effect)
-- -- -- -- -- UIImageView (Avatar)
-- -- -- -- -- IUlabel (dynamic (depending on code/input) multi line UILabel)
Certains voudraient que UILabel redimensionne UIView (arrière-plan) puis affecte à son tour la hauteur de cet UITableViewCell.
J'utilise XCode 8.2.1
J'ai pris une capture d'écran de la mise en page dans le storyboard et des contraintes appliquées.
J'ai mis à jour mes contraintes pour revenir à ContentView et j'ai mis à jour le nombre de lignes uilabel sur 0, puis implémenté le code UITableViewAutomaticDimension mais cela ne fonctionne toujours pas. Veuillez consulter le code et les captures d'écran ci-dessous.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
Pour aller un peu plus loin sur la réponse de Dao ..
Il a raison, vous devez utiliser UITableViewAutomaticDimension
En outre, vous devez vous assurer que vous définissez vos contraintes de manière à ce que tout le contenu de la cellule soit contraint aux cellules contentView. Donc, votre étiquette aura probablement besoin de contraintes telles que
Assurez-vous que vous définissez UILabel sur multiligne (ou lines = 0) et cela devrait fonctionner.
Si vous utilisez les fonctions de délégué heightForRowAt, assurez-vous de renvoyer UITableViewAutomaticDimension
Utilisez UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300
step1: Indiquez la contrainte ci-dessous à UIView qui se trouve à l'intérieur de contentView.
step2: Donne la contrainte ci-dessous à UIlabel
étape 3: Ensuite, sélectionnez votre contrainte de fin d'IUlabel et sélectionnez l'option d'édition, puis sélectionnez constant et sélectionnez l'option GreaterThanEqual.
step4: définir le numberofline = 0
de l'étiquette
step5: Ajoutez ce code dans viewDidLoad()
yourtableview.estimatedRowHeight = 80.0
yourtableview.rowHeight = UITableViewAutomaticDimension
Swift 4.2 . Comme mentionné ci-dessus, vous pouvez définir la propriété de l'objet UITableView ou
tblView.rowHeight = UITableView.automaticDimension
tblView.estimatedRowHeight = 300
vous pouvez également définir la même chose en implémentant les méthodes UITableViewDelegate
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 300
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
}