Mam widok, który zawiera tylko UILabel. Ta etykieta zawiera tekst wielowierszowy. Rodzic ma zmienną szerokość, którą można zmienić za pomocą gestu panoramowania. Mój problem polega na tym, że kiedy to robię, zmiana rozmiaru UILabel nie przelicza jego wysokości tak, że cała zawartość jest nadal widoczna, po prostu ją odcina.Funkcja Autolayout na iOS: Problem z UILabels w widoku rozmiaru rodzica
udało mi się go naprawić przy odrobinie hack, ale to jest strasznie powolny, aby uruchomić:
- (void)layoutSubviews {
CGSize labelSize = [self.labelDescription sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];
if (self.constraintHeight) {
[self removeConstraint:self.constraintHeight];
}
self.constraintHeight = [NSLayoutConstraint constraintWithItem:self.labelDescription attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:labelSize.height];
[self addConstraint:self.constraintHeight];
[super layoutSubviews];
}
nie Gdyby tak się stało automatycznie autoLayout?
EDIT
Struktura moim zdaniem jest:
UIScrollView
---> UIView
---> UILabel
Oto ograniczenia dotyczące UIScrollView:
<NSLayoutConstraint:0x120c4860 H:|-(>=32)-[DescriptionView:0x85c81c0] (Names: '|':UIScrollView:0x85db650)>,
<NSLayoutConstraint:0x120c48a0 H:|-([email protected])-[DescriptionView:0x85c81c0] priority:900 (Names: '|':UIScrollView:0x85db650)>,
<NSLayoutConstraint:0x120c48e0 H:[DescriptionView:0x85c81c0(<=576)]>,
<NSLayoutConstraint:0x120c4920 H:[DescriptionView:0x85c81c0]-(>=32)-| (Names: '|':UIScrollView:0x85db650)>,
<NSLayoutConstraint:0x120c4960 H:[DescriptionView:0x85c81c0]-([email protected])-| priority:900 (Names: '|':UIScrollView:0x85db650)>,
<NSLayoutConstraint:0x8301450 DescriptionView:0x85c81c0.centerX == UIScrollView:0x85db650.centerX>,
Oto ograniczenia dotyczące UIView:
<NSLayoutConstraint:0x85c4580 V:|-(0)-[UILabel:0x85bc7b0] (Names: '|':DescriptionView:0x85c81c0)>,
<NSLayoutConstraint:0x85c45c0 H:|-(0)-[UILabel:0x85bc7b0] (Names: '|':DescriptionView:0x85c81c0)>,
<NSLayoutConstraint:0x85c9f80 UILabel:0x85bc7b0.trailing == DescriptionView:0x85c81c0.trailing>,
<NSLayoutConstraint:0x85c9fc0 UILabel:0x85bc7b0.centerY == DescriptionView:0x85c81c0.centerY>
Sam UILabel nie ma żadnych ograniczeń, poza przypinaniem go do krawędzi rodzica
jakie są ograniczenia na etykiecie i pojemniku, w którym się znajduje? – larsacus
Dodano ograniczenia do pierwotnego postu – simon
Więc jedyne ograniczenia, które ustawiliście na etykiecie, to fakt, że wypełnia on kontener zarówno w poziomie, jak iw pionie? Czy tekst jest obcięty, gdy kontener ma określony rozmiar, czy też zawsze obcina tekst niezależnie od wielkości kontenera? – larsacus