UIScrollView
オブジェクトからいくつかの属性を表示するためにautolayout を使用しています。この情報を Web サービスから動的にダウンロードします。スクロールビューの幅は一定で (垂直スクロール動作をしたくないため)、そのサブビューは一連の制約でこの幅を尊重しますが、UILabel
の高さを動的に増やすことはできません。
私はすべてをコーディングし、viewDidLoad
セレクターを使用してサブビューを作成します...
- (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;
.
.
.
}
self.detailContentScrollView
変数を見ることができます。これはIBOulet
View Controllerのペン先から作成されたものです。
次に、updateConstraints
セレクターを使用します...
- (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]];
.
.
.
}
最後に、Web サービスの情報を受け取ると、スクロールビューからsizeToFit
のUILabel
セレクターを送信layoutIfNeeded
します。しかし、UILabel
新しいコンテンツでサイズが変更されることはありません。私は何を間違っていますか?