Hauteur UILabel dynamique dans UIScrollView avec Autolayout
Je suis en utilisant la mise en page automatique avec UIScrollView
à montrer certains attributs d'un objet. J'ai télécharger cette information dinamically de service web. La scrollview a une largeur constante (parce que je ne veux pas avoir un défilement vertical comportement) et de ses sous-vues-respect de cette largeur avec un groupe de contraintes, mais je ne peux pas augmenter la UILabel
hauteur de façon dynamique.
Je code tout et j'utilise viewDidLoad
sélecteur de créer des sous-vues...
- (void)viewDidLoad {
[super viewDidLoad];
.
.
.
UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectZero];
descriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;
descriptionLabel.numberOfLines = 0;
descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
descriptionLabel.opaque = YES;
descriptionLabel.backgroundColor = [UIColor clearColor];
descriptionLabel.textColor = [UIColor whiteColor];
descriptionLabel.textAlignment = NSTextAlignmentRight;
descriptionLabel.font = [UIFont appetitoMediumItalicFontWithSize:15.0f];
descriptionLabel.text = NSLocalizedStringFromTable(@"APT_DISH_DETAIL_DESCRIPTION", @"DishDetail", @"Etiqueta que contiene la descripción del platillo");
[descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.detailContentScrollView addSubview:descriptionLabel];
self.descriptionLabelS = descriptionLabel;
.
.
.
}
Vous pouvez regarder le self.detailContentScrollView
variable, c'est un IBOulet
créé à partir de la vue du contrôleur de la plume.
Puis-je utiliser le updateConstraints
sélecteur...
- (void)updateConstraints {
[super updateConstraints];
//This dictionary has more variables, ok
NSDictionary *viewsDict = @{@"dish_description_label": self.descriptionLabelS};
.
.
.
[self.descriptionLabelS setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.detailContentScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[view1][dish_description_label]-[view2][view3][view4]-|" options:0 metrics:nil views:viewsDict]];
.
.
.
}
et enfin, lorsque je reçois le service web de l'info, j'envoie sizeToFit
's UILabel
sélecteur et layoutIfNeeded
de la scrollview. Mais mon UILabel
jamais redimensionne avec le nouveau contenu. Ce que je fais mal?
source d'informationauteur specktro | 2013-10-04
Vous devez vous connecter pour publier un commentaire.
UIScrollView de la taille du contenu est mis à jour de façon dynamique avec mise en page automatique, peut-être que vous ne devez effectuer les opérations suivantes
Où _contentView est votre UILabel (Si vous avez de plus en plus complexe hiérarchie vue de mettre sur une vue conteneur) et l'auto.la vue est la vue contrôleur (ou autre chose). Espérons que cela aide aussi: iOS mise en page automatique avec UIScrollview: Pourquoi l'affichage du contenu de défilement de vue pas remplir le défilement de la vue?....
Aussi, ne pas oublier d'établir votre
UILabel preferredMaxLayoutWidth
Cheers!
J'ai eu le même problème. Il semble y avoir un bug avec apple, afin de texte multiligne nécessite une approche de deux passes à la mise en page correcte et tout repose sur la propriété preferredMaxLayoutWidth.
J'ai fini par l'ajout de ces deux méthodes à la ScrollViewController:
J'ai basé ma solution sur cette réponse: https://stackoverflow.com/a/13616052/2828256
Ici est une mise en œuvre complète:
Pour une explication détaillée:
https://arielelkin.github.io/articles/uilabel-plus-uiscrollview-plus-autolayout