J'ai consulté la documentation Apple sur la classe UITableView et la référence du délégué, mais je n'ai pas trouvé le moyen de définir explicitement la hauteur de l'en-tête de la table.
Je règle la hauteur des cellules de la table en utilisant le délégué suivant:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
et définissez la hauteur de l'en-tête de section/pied de page à l'aide des délégués suivants.
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
Quelqu'un pourrait-il m'aider à définir la hauteur de l'en-tête et du pied de page?
Merci.
Il suffit de définir la propriété frame de la tableHeaderView.
J'ai trouvé un hack sympa. Ajoutez la ligne ci-dessous après avoir modifié la propriété du cadre
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
L'astuce est (je pense) que UITableView met en cache la hauteur (le cadre en fait) lorsque vous affectez la vue à la propriété tableHeaderView. La ligne ci-dessus assigne à nouveau la hauteur.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
sizeHeaderToFit()
}
private func sizeHeaderToFit() {
let headerView = tableView.tableHeaderView!
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
}
Plus de détails peuvent être trouvés ici
Si vous en avez toujours besoin, avez-vous essayé de définir la propriété
self.tableView.tableHeaderView
Si vous calculez la hauteur dont vous avez besoin et définissez une nouvelle vue pour tableHeaderView
:
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
Ça devrait marcher.
Cela ne fonctionne avec moi que si je règle d'abord le pied de page/l'en-tête de la table à nil:
self.footer = self.searchTableView.tableFooterView;
CGRect frame = self.footer.frame;
frame.size.height = 200;
self.footer.frame = frame;
self.searchTableView.tableFooterView = nil;
self.searchTableView.tableFooterView = self.footer;
Assurez-vous que self.footer est une référence solide pour empêcher la désallocation de la vue du pied de page.
Swift 4 - vous pouvez gérer la hauteur avec HEIGHT_VIEW, Ajoutez simplement ce code, ça marche
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let HEIGHT_VIEW = 60
tableView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
tableView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
}
Créez simplement une vue Footer Wrapper à l'aide du constructeur UIView(frame:_)
Si vous utilisez un fichier xib pour FooterView, créez une vue à partir de xib et ajoutez-la en tant que sous-vue à la vue wrapper. puis assignez wrapper à tableView.tableFooterView = fixWrapper
.
let fixWrapper = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 54)) // dont remove
let footer = UIView.viewFromNib("YourViewXibFileName") as! YourViewClassName
fixWrapper.addSubview(footer)
tableView.tableFooterView = fixWrapper
tableFootterCostView = footer
Cela fonctionne parfaitement pour moi! le but est de créer une vue de pied de page avec le constructeur (frame:_)
. Même si vous créez UIView () et assignez la propriété frame, cela peut ne pas fonctionner.
Si vous définissez la tableHeaderView
par programme, placez-la simplement dans viewDidLayoutSubviews
.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setupTableViewHeader()
}
private func setupTableViewHeader() {
// Something you do to set it up programatically...
tableView.tableHeaderView = MyHeaderView.instanceFromNib()
}
Si vous ne l'avez pas défini par programme, vous devez faire la même chose que ce que @Kris a répondu à partir de ceci lien
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
sizeHeaderToFit()
}
private func sizeHeaderToFit() {
if let headerView = tableView.tableHeaderView {
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
}
}
Si vous utilisez XIB pour headerView principal de tableView, vous pouvez définir XIB en tant que forme libre, définir la hauteur à votre guise et désélectionner les blocs supérieur, inférieur et les flèches supérieure et inférieure d'Autotizing .
Vous pouvez créer un UIView avec la hauteur désirée (la largeur doit être celle de UITableView) et à l'intérieur, vous pouvez placer un UIImageView avec l'image aux dimensions appropriées: elles ne s'étireront pas automatiquement.
Vous pouvez également donner une marge au-dessus et au-dessous de UIImageView intérieur, en donnant une hauteur supérieure à la vue conteneur.
En outre, vous pouvez affecter une transformation de traduction afin de placer l'image au milieu de la vue d'en-tête de conteneur, par exemple.
Si vous ajoutez une vue en tant qu'en-tête de tableau dans IB, définissez le cadre de cette vue dans IB dans l'onglet 5 (inspecteur de taille)
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}
ou vous pouvez utiliser comme ça aussi
tableView.estimatedSectionHeaderHeight