2012-01-18 1 views
2

J'ai dimensionné ma chaîne pour maximiser la hauteur (1 ligne) de sorte que toute largeur excessive soit coupée (comme dans le milieu de glyphe), ce que lineBreakMode: UILineBreakModeClip devrait faire. Au lieu de cela, le texte semble tronquer (?) En ne dessinant que les caractères complets qui correspondent (non prévus ou souhaités). En gros:Impossible de créer le clip UILabel

[label setNumberOfLines:1]; 
label.font = [UIFont systemFontOfSize:64.0f]; 
label.lineBreakMode = UILineBreakModeClip; 
[label setText:@"ABCDEIIIIII"]; 

Répondre

1

A related, more complicated question propose une solution à ceci: créer une étiquette avec une grande largeur et l'ajouter à un UIView de la largeur désirée. (Ajoutez ensuite l'UIView à votre application.) La définition de la propriété clipsToBounds de l'UIView vous donnera le clipping de mi-glyphe souhaité. Explication: Supposons que vous souhaitiez qu'une étiquette soit tronquée à 100 px. Réglez le UILabel à une largeur de 200 et il rendra heureusement les 100 pixels que vous voulez. Que ce soit tronqué à 200 lettres, vous vous en fichez. Vous ajoutez cette étiquette à un UIView de 100px avec des ensembles de ClipsToBounds, et il vous montrera seulement le 100px désiré de l'étiquette et le coupera mi-glyphe après cela.

Adapté de l'autre poste, pour illustrer:

UIView *topContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)]; 
topContainer.clipsToBounds = YES; 
topContainer.opaque = NO; 
topContainer.backgroundColor = [UIColor clearColor]; 

UILabel *topLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; 
[topLabel setText:@"ABCDEIIIIII"]; 
topLabel.opaque = NO; 

[topContainer addSubview:topLabel]; 
[self.view addSubview:topContainer]; 
1

essayez d'utiliser:

label.clipsToBounds = YES; 
label.layer.masksToBounds = YES; 

pour obtenir l'effet que vous voulez.