11
votes

tableview.tableheaview étant définie mais pas dessiné

Chaque fois que je règle ma table de table, je ne le vois pas dans le simulateur. Si je l'ajoute sous forme de sous-vision, il finit par devenir tiré sous l'en-tête de section. Toute idée de ce qui me manque ici?

J'ai un fichier XIB. Je n'ai vu aucune propriétés dans IB pour affecter les roupas. P> xxx pré>

édition: StandardTableView.m Init Méthode: P>

- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
    self.backgroundColor = [UIColor redColor];
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x,0,frame.size.width,frame.size.height)];
    self.label.backgroundColor = [UIColor clearColor];
    self.label.textColor = [UIColor whiteColor];
    self.label.font = [UIFont fontWithName:@"Helvetica" size:16];
    [self addSubview:self.label];
}
return self;
}


0 commentaires

9 Réponses :


7
votes

Tout d'abord, votre code a l'air bien.

2 problèmes possibles:

  • self.tableview n'est pas défini
  • TableauView est remplacé après ViewDiDload

7 commentaires

Ma TableView est définie - les cellules fonctionnent bien et le journal affiche l'amende de la TableDeView Cadre. Je ne change pas la table de la tableView ailleurs .. Peut-être une certaine étrangeté et devrait copier dans un nouveau projet?


Pour l'instant, je vais essayer de redimensionner la vue de table et d'ajouter la vue d'en-tête sous forme de vue séparée.


Comment avez-vous vérifié que la propriété TableView est définie (pas nul)? Le fait que les cellules soient dessinées ne disent pas nécessairement que la propriété TableView n'est pas nulle ... Essayez d'ajouter nslog (@ "self.tableview =% @, self.tableview.tableheaview =% @", auto .tableview, Self.tableView.tableheaview); Juste après le Self.tableview.TableDerview = Heavreview; Intérieur ViewDidload et voyez ce que vous entrez dans le journal. ..


Dans mon cas, j'ai eu: self.tableview = ; contentoffset: {0, 0}>, self.tableview.tableheaview = > mais toujours pas montrant


@Farini, peut-être que l'en-tête de vue de la table est défini mais non dessiné. C'est le deuxième cas de ma réponse. Essayez d'appeler [auto.tableview ReloadData]; juste après avoir défini la vue d'en-tête ...


Hey! J'ai la même chose, la table de tableView non affichée. Toute solution?


Voir et aimer ma réponse ci-dessous.



6
votes

J'avais le même problème et j'ai remarqué que n'importe quel TableViewheader que j'ai défini dans ma NIB n'apparaîtrait pas si j'avibis ma tableView en invoquant: xxx

mais il est apparu magiquement sans effort quand je Initialisé ma tableView en utilisant: xxx

bizarre.


1 commentaires

Lorsque vous utilisez Initwithnibname:, puis toutes vos info de NIB (comme la table TableCeaview) seront chargées à partir de la nibieuse que vous spécifiez. C'est probablement pourquoi il "a comparu comme magie" :)



7
votes

note! Si vous vous attendez à ce que la vue sur la table définit le cadre de la vue d'en-tête pour vous, vous vous trompez et obtiendrez des résultats très étranges.

J'ai eu le mien réglé sur CGRECTERO pensant que cela se résoudrait, mais la chose n'apparaîtrait pas et quand elle l'a fait, il semblerait, il semblerait caché sous la barre Naville ou en collant dans la première cellule et tel.


0 commentaires

-8
votes

Essayez de définir UitailViewelegate dans votre en-tête et placez le code suivant dans votre fichier .m.

#pragma mark UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 44.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    StandardTableHeaderView *headerView = [[StandardTableHeaderView alloc] initWithFrame:CGRectMake(0,0,320,44)];

    return headerView;
}


0 commentaires

2
votes

J'ai essayé de mettre la configuration de tabledeview code> dans ViewDiDload code> et LoadView code> méthodes - il n'a pas fonctionné: une partie de la vue était blanche , pas visible complètement. Ensuite, j'ai essayé de le mettre à ViewDidAppear Code> et cela a fonctionné:

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];

  [self setupTableHeaderView];
}


1 commentaires

Cela a fonctionné pour moi aussi ... mais pourquoi? J'ai d'autres projets Xcode où j'ai défini la vue en-tête de la table dans ViewDidLoad et tout a fonctionné bien .... hmmm. Eh bien merci quand même :)



0
votes

J'ai eu un problème où je portais une vue dans une tableViewController en tête d'en-tête et que je ne montrerais pas quand j'ai exécuté l'application, le problème a été ajouté à l'en-tête lorsqu'il n'y avait pas de cellules prototypes. Si vous ajoutez au moins une cellule prototype, ajoutez l'en-tête au-dessus de celui-ci, puis supprimez la cellule (si besoin d'être), il l'enregistrait en tant que cashervie-en-tête correctement


0 commentaires

0
votes

Lorsque vous UIView à l'intérieur de l'UitailView dans le storyboard et que vous essayez de définir TableView.TableDerview = Your_View, cela ne fonctionnera pas. Vous devez d'abord faire glisser-déposer qui affiche le contrôleur d'affichage extérieur crée sa sortie, puis définissez

TABLEVIEW.TABLEDERVIEW = YOUR_VIEW


0 commentaires

1
votes

vient de trouver le même problème où je l'avais dans ViewDidLoad () il a fonctionné dans le simulateur pour iPhone 11 Pro mais pas pour iPhone 8. Le déplaçant à viewDidAppear () a résolu le problème, mais j'ai fini par le déplacer vers ViewDidLayouTouSubviews () Strong> que je ressentais était l'endroit le plus approprié pour cela - fonctionne parfaitement dans le simulateur sur tous les modèles iPhone.

override func viewDidLayoutSubviews() {

    let headerView = Bundle.main.loadNibNamed("HeaderView", owner: self, options: nil)?.first as? UIView
    headerView!.frame = CGRect(x: 0, y: 0, width: table_view!.frame.width, height: 160.0)
    tableView!.tableHeaderView = headerView
}


0 commentaires

0
votes

Dessin sur l'indice de clé de Kalle J'ai ajouté cette abomination xxx pré>

à la classe qui définit la vue en-tête. Si vous n'avez pas encore de type dynamique, vous auriez une méthode plus simple encore. P>

Voici l'utilisation du contrôleur d'affichage qui configure la table TableAeView. avec l'instance de cette classe p>

loanApplicationStepsView.bounds.size.height = loanApplicationStepsView.intrinsicContentheight


0 commentaires