Depuis que j'ai découvert que AutoLayout
je l'utilise partout, maintenant j'essaye de l'utiliser avec un tableHeaderView
.
J'ai fait subclass
de UIView
tout ajouté (étiquettes , etc ...) Je voulais avec leurs contraintes, alors j'ajouté ce CustomView
au UITableView
' tableHeaderView
.
Tout fonctionne très bien sauf que le UITableView
s'affiche toujours au - dessus du CustomView
, par dessus, je veux dire qu'il CustomView
est sous le UITableView
donc il ne peut pas être vu!
Il semble que peu importe ce que je fais, le height
de UITableView
' tableHeaderView
est toujours 0 (de même que la largeur, x et y).
Ma question: est-il possible du tout d'accomplir cela sans régler le cadre manuellement ?
EDIT:
Le CustomView
' subview
que j'utilise a ces contraintes:
_title = [[UILabel alloc]init];
_title.text = @"Title";
[self addSubview:_title];
[_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top
[_title keep:[KeepRightInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepLeftInset rules:@[[KeepMin must:5]]]];
[_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]];
J'utilise une bibliothèque pratique 'KeepLayout' car l'écriture manuelle des contraintes prend une éternité et beaucoup trop de lignes pour une seule contrainte, mais les méthodes s'expliquent d'elles-mêmes.
Et le UITableView
a ces contraintes:
_tableView = [[UITableView alloc]init];
_tableView.translatesAutoresizingMaskIntoConstraints = NO;
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.backgroundColor = [UIColor clearColor];
[self.view addSubview:_tableView];
[_tableView keep:[KeepTopInset rules:@[[KeepEqual must:0]]]];// These 4 constraints make the UITableView stays 0 away from the superview top left right and bottom.
[_tableView keep:[KeepLeftInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepRightInset rules:@[[KeepEqual must:0]]]];
[_tableView keep:[KeepBottomInset rules:@[[KeepEqual must:0]]]];
_detailsView = [[CustomView alloc]init];
_tableView.tableHeaderView = _detailsView;
Je ne sais pas si je dois définir des contraintes directement sur le CustomView
, je pense que la hauteur du CustomView est déterminée par les contraintes sur le UILabel
"titre" qu'il contient.
EDIT 2: Après une autre enquête, il semble que la hauteur et la largeur du CustomView sont correctement calculées, mais le haut du CustomView est toujours au même niveau que le haut de l'UITableView et ils se déplacent ensemble lorsque je fais défiler.