Est-il possible d'aligner verticalement le text à l'intérieur des labels avec un "grand" cadre

Dans mon application, j'ai plusieurs vues de table avec des cellules personnalisées. Une partie du text dans les cellules est répartie entre 2 et 4 lignes de sorte que la hauteur de l'label est suffisamment grande pour contenir le contenu.

Cependant, sur iPad, l'écran est plus grand et je veux que le text apparaisse en haut à gauche de l'label, pas au milieu, comme c'est le cas lorsque vous utilisez la propriété numberOfLines . Je sais que vous pouvez aligner horizontalement le text, mais il doit être possible d'aligner le text en haut à gauche également? Ou est-ce impossible?

Capture d'écran:

entrez la description de l'image ici

Il est impossible d'aligner le text dans UILabel verticalement. Mais, vous pouvez modifier dynamicment la hauteur de l'label en utilisant sizeWithFont: méthode de NSSsortingng , et juste définir ses x et y comme vous le souhaitez.

Comme alternative, vous pouvez utiliser UITextField . Il supporte la propriété de contentVerticalAlignment car il s'agit d'une sous-class de UIControl . Vous devez définir son userInteractionEnabled sur NO pour empêcher l'user de taper du text dessus.

J'ai effectivement remarqué que l'utilisation

 [Blue setSizeToFit] 

s'aligne verticalement au sumt. La valeur par défaut étant cinput.

Vous pouvez le faire comme suit

  1. Définissez la propriété numberOfLines votre libellé 0 sur IB

  2. Définissez lineBreakMode comme UILineBreakModeWordWrap ( très très important )

maintenant tout ce que vous avez mis sur l'label suffit d'append quelques @ "\ n" à cela ….. ex.-

 [yourTextLabel setText:@"myLabel\n\n\n\n\n"]; 

Dans iOS 7 sizeWithFont: est maintenant obsolète! Plusieurs solutions comme le sous- UILabel doivent être adaptées.

Ma solution pour le text d'label aligné par le haut: Dans une sous-class TopVerticalAlignmentLabel : UILabel remplace drawRect: comme suit:

 - (void)drawRect:(CGRect)rect { CGRect labelSsortingngRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) options:(NSSsortingngDrawingUsesLineFragmentOrigin|NSSsortingngDrawingUsesFontLeading) atsortingbutes:@{ NSFontAtsortingbuteName: self.font, /* further atsortingbutes */} context:nil]; [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelSsortingngRect.size.height)]; } 

sizeToFit ne fonctionne pas dans UITableCellView , car les cellules sont réutilisées pendant le défilement.

La solution consiste à calculer la hauteur de la cellule du tableau en fonction de la police et de la taille de la police et à ajuster la hauteur de l'label.

Comme il était assez difficile de find la solution sur le web, j'ai écrit un petit article à ce sujet

J'ai ajouté dans viewDidLoad

 self.textLabel.numberOfLines = 0; [self.textLabel sizeToFit]; 

assurez-vous que vos contraintes sont correctes, afin que l'label puisse rétrécir ou grossir. Sinon, cela ne fonctionnera pas.

Voici la même question posée par SomeOne. Vous findez une façon plus appropriée de résoudre ce problème. Ils ont fait une excellente explication.

Je pense que oui, vous devriez jeter un coup d'oeil à ça.

Ici, dans ce fil de nombreuses réponses suggèrent de définir le cadre dynamic pour le UILabel sur la base du text comme ci-dessous l'extrait de code décrit.

  CGSize theSsortingngSize = [textToBeUsed sizeWithFont:lblTitle.font constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode]; lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theSsortingngSize.width, theSsortingngSize.height); lblTitle.text = theText; // lblTitle is the Label used for showing the Text. 

vous pouvez get une idée plus précise plutôt que d'utiliser textField ici, il est

Vous pouvez simplement utiliser un UITextView, et mettre son UserInteraction activé à non, et tous vos problèmes seront résolus!