web-dev-qa-db-fra.com

Définir la hauteur de TableView par le nombre ou les lignes

J'ai TableView dans la MainstoryBoard et le nombre de lignes est aléatoire à chaque fois. Je veux que la hauteur de TableView entière soit flexible - par là, je veux dire, par exemple: si j'ai 4 rangées dans la TableView et que chaque hauteur de rangée TableView est 22, la hauteur de TableView sera alors de 88.. exemple: nombre de lignes: 2 hauteur de ligne = 22 TableView sera 44.

Comment puis-je le faire?

14
Eliko

Vous pouvez modifier la hauteur UITableView en fonction de la taille du contenu comme ci-dessous:

Swift 2.2

tableView.frame = CGRectMake(tableView.frame.Origin.x, tableView.frame.Origin.y, tableView.frame.size.width, tableView.contentSize.height)

Swift 3 ou 4+

tableView.frame = CGRect(x: tableView.frame.Origin.x, y: tableView.frame.Origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)

et assurez-vous d'écrire la ligne ci-dessus dans la méthode viewDidAppear

Vous devez également écrire la ligne ci-dessus dans viewDidLayoutSubviews.

Swift 2.2

func viewDidLayoutSubviews(){
     tableView.frame = CGRectMake(tableView.frame.Origin.x, tableView.frame.Origin.y, tableView.frame.size.width, tableView.contentSize.height)
     tableView.reloadData()
}

Swift 3 ou 4+

func viewDidLayoutSubviews(){
     tableView.frame = CGRect(x: tableView.frame.Origin.x, y: tableView.frame.Origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
     tableView.reloadData()
}
32
Sohil R. Memon

Prendre en charge la contrainte de hauteur de la vue parente et lui attribuer la hauteur du contenu de la vue du tableau + constante (hauteur supplémentaire des autres contenus de la vue)

heightConstraintView.constant = tableView.contentSize.height + constantValue //use the value of constant as required.

et écrivez ce code dans la méthode cellForRowAt.

1
Mr. JD Agrawal
DispatchQueue.main.async {
    var frame = tableView.frame
    frame.size.height = tableView.contentSize.height
    tableView.frame = frame
}
0
iOS

Utilisez ceci pour Swift 3

 override func viewDidLayoutSubviews(){
    tableView.frame = CGRect(x: tableView.frame.Origin.x, y:  tableView.frame.Origin.y, width: tableView.frame.size.width, height: tableView.contentSize.height)
    tableView.reloadData()
}
0
Sreeraj VR