2010-09-06 9 views
0

Je dois remplir des cellules avec du texte enveloppant de longueur variable. Ma routine actuelle gère cela de manière satisfaisante, cependant, je suis préoccupé par l'utilisation de quelques constantes utilisées. Les valeurs 10 et 260 ci-dessous représentent la marge et la largeur de cellule attendues, mais elles ne sont précises que pour la résolution de définition standard en orientation portrait.Comment gérer les constantes de position de l'écran dans le code iPhone?

Existe-t-il un objet écran/table qui me fournit ces valeurs en tant que mesures que je pourrais utiliser à la place des constantes?

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell; 
    UILabel *lbl; 
    CGRect frame; 

    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero 
            reuseIdentifier:AnswerIdentifier] autorelease]; 

    frame.origin.x = 10; 
    frame.origin.y = 10; 
    frame.size.height = [self textHeight:indexPath]; 
    frame.size.width = 260; 

    lbl = [[UILabel alloc] initWithFrame:frame]; 
    lbl.lineBreakMode = UILineBreakModeWordWrap; 
    lbl.numberOfLines = 0;   
    [cell.contentView addSubview:lbl]; 
    [lbl release]; 

    return cell; 

} 

- (CGFloat)textHeight:(NSIndexPath *)indexPath { 

    CGSize textSize; 
    CGSize constraintSize; 
    CGFloat height; 

    NSString *theText = [self cellText:indexPath]; 

    constraintSize = CGSizeMake(260.0f, MAXFLOAT); 

    textSize = [theText sizeWithFont:kCELL_FONT 
        constrainedToSize:constraintSize 
         lineBreakMode:UILineBreakModeWordWrap]; 
    height = textSize.height; 

    return height; 

} 

Répondre

0

Le tableau doit évidemment tenir dans le cadre de la vue contenant (qui pourrait être le point de vue de haut niveau ou la fenêtre), donc je pourrais utiliser des décalages de pourcentage ou pixels de ce Rect.

0

Essayez d'utiliser

[[UIScreen mainScreen] applicationBounds]; 

Cela renverra un CGRect pour la taille de la fenêtre en cours. Ensuite, pour votre code, vous pouvez utiliser:

CGRect screenRect = [[UIScreen mainScreen] applicationBounds]; 
frame.origin.x = 10; 
frame.origin.y = 10; 
frame.size.height = [self textHeight:indexPath]; 
frame.size.width = screenRect.size.width - 60.0; 

En supposant que les décalages de pixels dans x sont fixes, avec une largeur d'étiquette flexible.