38 votes

Centrer le texte UIPickerView

Donc, j'ai un aperçu rapide avec des lignes qui ne contiennent que le nombre 0-24 et cela semble un peu ridicule puisque les chiffres sont alignés à gauche, ce qui laisse un énorme vide à droite de la sélection.

Existe-t-il un moyen simple de centrer le texte dans un aperçu uipick?

70voto

Robin Points 8298
 - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];
    label.text = [NSString stringWithFormat:@"something here"];
    label.textAlignment = NSTextAlignmentCenter; //Changed to NS as UI is deprecated.
    label.backgroundColor = [UIColor clearColor];
    [label autorelease];
    return label;
}
 

ou quelque chose comme ça.

22voto

James Boutcher Points 1048

Un peu plus facile maintenant dans iOS 6 ... Il existe une nouvelle méthode que vous pouvez implémenter pour renvoyer une chaîne attribuée ... Et vous pouvez définir un alignement dans des chaînes attribuées.

 - (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component {
    NSString *text = [NSString stringWithFormat:@"R%d C%d", row, component];
    NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:text];
    NSMutableParagraphStyle *mutParaStyle=[[NSMutableParagraphStyle alloc] init];
    mutParaStyle.alignment = NSTextAlignmentCenter;
    [as addAttribute:NSParagraphStyleAttributeName value:mutParaStyle range:NSMakeRange(0,[text length])];
    return as;
}
 

13voto

Rog Points 12427

Vous pouvez implémenter cette méthode déléguée, qui renvoie un CGFloat.

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

Ceci est appelé dans la vue sélecteur pour déterminer la largeur de la ligne.

5voto

Praveen Points 9516

En dessous de celui qui fonctionne aussi très bien

 - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
    lbl.text = [reservePickerArray objectAtIndex:row];
    lbl.adjustsFontSizeToFitWidth = YES;
    lbl.textAlignment=UITextAlignmentCenter;
    lbl.font=[UIFont systemFontOfSize:20];
    return lbl;
}
 

À votre santé!!

3voto

Ishu Points 8284

Aucune propriété du sélecteur ayant la capacité d'alignement définie.

vous devez donc coder en dur pour cela.

voir ce code

 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {

    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component 
{
    return 25;  

}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

NSString *title=[NSString stringWithFormat:@"         %i",row];//here you give extra spaces.
    return title;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X