Récupérer personnalisé prototype de la hauteur de la cellule de storyboard?

Lors de l'utilisation de "Dynamique des Prototypes" pour spécifier UITableView contenu sur la table de montage séquentiel, il y a une "Hauteur de Ligne" les biens qui peuvent être mis à la Coutume.

Lors de l'instanciation des cellules, cette coutume hauteur de ligne n'est pas pris en compte. Cela a du sens, puisque ce qui prototype de cellule que j'utilise est décidé par mon code d'application au moment de la cellule doit être instancié. Pour instancier toutes les cellules lors du calcul de la disposition introduirait une pénalité sur les performances, donc je comprends pourquoi cela ne peut pas être fait.

La question qui se pose alors, je peux en quelque sorte de récupérer la hauteur de la donnée d'une cellule de réutilisation de l'identificateur, par exemple

[myTableView heightForCellWithReuseIdentifier:@"MyCellPrototype"];

ou quelque chose le long de cette ligne? Ou dois-je répéter l'explicite les hauteurs de ligne dans mon code de l'application, avec le fardeau de l'entretien qui suit?

Résolu, avec l'aide de @TimothyMoose:

Les hauteurs sont stockés dans les cellules elles-mêmes, ce qui signifie que le seul moyen de se les hauteurs consiste à instancier les prototypes. Une façon de le faire est de retirer les cellules à l'extérieur de la cellule normale de la méthode de rappel. Voici mon petit POC, qui fonctionne:

#import "ViewController.h"

@interface ViewController () {
    NSDictionary* heights;
}
@end

@implementation ViewController

- (NSString*) _reusableIdentifierForIndexPath:(NSIndexPath *)indexPath
{
    return [NSString stringWithFormat:@"C%d", indexPath.row];
}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(!heights) {
        NSMutableDictionary* hts = [NSMutableDictionary dictionary];
        for(NSString* reusableIdentifier in [NSArray arrayWithObjects:@"C0", @"C1", @"C2", nil]) {
            CGFloat height = [[tableView dequeueReusableCellWithIdentifier:reusableIdentifier] bounds].size.height;
            hts[reusableIdentifier] = [NSNumber numberWithFloat:height];
        }
        heights = [hts copy];
    }
    NSString* prototype = [self _reusableIdentifierForIndexPath:indexPath];
    return [heights[prototype] floatValue];
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 3;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* prototype = [self _reusableIdentifierForIndexPath:indexPath];
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:prototype];
    return cell;
}

@end
  • J'avais été en utilisant cette méthode pendant un certain temps, puis sur un nouveau storyboard, j'étais surtout zéro-hauteur (et largeur) dimensions pour les cellules. Même les non-zéro ont des valeurs inattendues. La désactivation de la taille des classes restauré cette fonctionnalité. Décevant, bien que, depuis cette "solution", désactivé, d'importantes fonctions dans le storyboard. Cependant, cela a fonctionné pour mon besoin immédiat.
  • J'ai trouvé une solution plus complète pour la résolution de ce problème avec la taille des classes activé.
InformationsquelleAutor Krumelur | 2012-12-01