Używam autolayout z UIScrollView
, aby wyświetlić niektóre atrybuty z obiektu. Pobieram te informacje w sposób dinamicznie z serwisu internetowego. Widok przewijania ma stałą szerokość (ponieważ nie chcę mieć zachowania pionowego przewijania), a jego podglądy respektują tę szerokość z grupą więzów, ale nie mogę dynamicznie zwiększać wysokości UILabel
.Dynamiczna wysokość UILabel wewnątrz UIScrollView z funkcją Autolayout
kod I wszystko i używam viewDidLoad
selektor stworzyć subviews ...
- (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;
.
.
.
}
Można oglądać zmienną self.detailContentScrollView
, jest to IBOulet
stworzony z stalówką widok kontrolera.
Następnie używam updateConstraints
wyboru ...
- (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]];
.
.
.
}
i wreszcie, kiedy otrzymam informacje o usługi sieci Web, w wyślę sizeToFit
„s UILabel
selektora i layoutIfNeeded
z Scrollview. Ale moja UILabel
nigdy się nie zmienia wraz z nową zawartością. Co ja robię źle?
Był to kolejny funkcjonalne rozwiązanie problemu, dziękuję. – specktro
Sprawdź ten wpis, aby uzyskać pełną implementację: http://arielelkin.github.io/articles/uilabel-plus-uiscrollview-plus-autolayout/ – Eric
@Eric: Link nie działa. – testing