2010-10-07 6 views
1

alt textc constatation largeur de pixel d'une chaîne

J'ai une UIButton de largeur fixe et je veux placer le texte en elle. Puisque la taille de la chaîne est inconnue à l'avance, je devrai redimensionner la police en lisant la chaîne à partir d'un fichier plat. Comment puis je faire ça? Une fonction similaire à ce qui suit sera grand:

UIFont resizeFontAs:(UIFont)initialFont andStringAs:(NSString*)string andWidthAs:(int)width 

Merci à l'avance

Edit: Ce ne marche pas de code semble fonctionner:

// Method for creating button, with background image and other properties 
- (UIButton *) getCallAgentButtonWithTitleAs:(NSString *)aTitle andImageAs:(UIImage*)bgImg atIndex:(int)index{  
    UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    aButton.frame = CGRectMake(10, 2+index*50, 300, 48);  
    aButton.titleLabel.frame = CGRectMake(aButton.titleLabel.frame.origin.x + 25.0,     aButton.titleLabel.frame.origin.y, aButton.titleLabel.frame.size.width - 50.0,  aButton.titleLabel.frame.size.height);  
    aButton.titleLabel.adjustsFontSizeToFitWidth = YES; 
    [aButton setTitle:aTitle forState:UIControlStateNormal]; 
    //aButton.titleLabel.font = [UIFont boldSystemFontOfSize:12]; 
    [aButton setTitleColor:UIColorFromRGB(0xFDD428) forState:UIControlStateNormal]; 
    [aButton setBackgroundImage:bgImg forState:UIControlStateNormal]; 
    [aButton addTarget:self action:@selector(callAgent:) forControlEvents:UIControlEventTouchUpInside]; 
    // set the tag as the index and use it later to obtain the phoneNo 
    [aButton setTag:index]; 
    return aButton; 
} 
+0

Avez-vous envisagé d'utiliser un UITableView ici à la place des instances de UIButton? On dirait que vous essayez de dupliquer des fonctionnalités qui existent déjà dans UITableViewCell. – jlehr

+0

maintenant cela ne semblerait pas cool ... mais la société pour laquelle je travaille me dit que "nous vous payons pour ne pas penser et faire des recherches" :) par conséquent, je dois aller avec la première pensée qui vient à moi. Pour confirmer cependant, vous voulez dire que je pourrais annoncer un UITableView, mettre chaque cellule avec les graphiques (qui ressemble à un bouton de toute façon) et ensuite associer chaque "bouton presse" avec un "cellClicked"? – Amarsh

Répondre

5

Vous pouvez dire l'étiquette du bouton pour redimensionner la police lui-même.

myButton.titleLabel.adjustsFontSizeToFitWidth = YES; 
myButton.titleLabel.minimumFontSize = 6.0; // Pick your own value here. 
+0

Oui, je dois donner +1. – jlehr

+0

Merci beaucoup. D'accord, il y a une complication de plus ... J'ai des graphiques de taille fixe sur chaque bord du bouton. disons que le bouton est 300px, les graphiques sont chacun de 25px chacun. Le problème avec le redimensionnement automatique est que le texte survole les graphiques. Des moyens de contourner cela? – Amarsh

+0

Les graphiques font-ils partie de la vue du bouton ou sont-ils des frères et sœurs du bouton? –

2

Utilisez la méthode suivante:

- (CGSize)sizeWithFont:(UIFont *)font 
      minFontSize:(CGFloat)minFontSize 
     actualFontSize:(CGFloat *)actualFontSize 
       forWidth:(CGFloat)width 
      lineBreakMode:(UILineBreakMode)lineBreakMode 

Cela vous permet de spécifier à la fois une taille par défaut (la première arg) et une taille minimale, et la police sera automatiquement mis à l'échelle si nécessaire.

+0

J'aime mieux la solution de Robot K. :-) – jlehr

+0

Merci :). J'ai d'abord considéré cette approche, mais elle ne restitue pas la taille de la police utilisée pour calculer la taille, ce que je pense qu'Amarsh recherche. –

+1

C'est le paramètre horsFontSize out, non? – Ken