Sto provando a costruire una vista che avrà diversi controlli diversi, ma voglio che la vista scorra solo nella direzione verticale. Sto usando il layout automatico, quindi non voglio dover specificare manualmente la dimensione (so che posso farlo, ma da quello che ho capito in base alle note di rilascio su UIScrollView
non dovresti farlo).Come utilizzare UIScrollView con AutoLayout (iOS6)?
Quindi, se creo un semplice controller di visualizzazione (senza file .xib) e aggiungo semplicemente il metodo seguente al metodo init
, mi aspetto che le mie etichette si sposino (cosa che fanno) e che la mia vista scenda verticalmente, tuttavia, questo non è il caso:
- (id)init {
self = [super init];
if (self) {
UIScrollView *_scrollView = [UIScrollView new];
[_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
UILabel *label1 = [UILabel new];
UILabel *label2 = [UILabel new];
[label1 setTranslatesAutoresizingMaskIntoConstraints:NO];
[label2 setTranslatesAutoresizingMaskIntoConstraints:NO];
[label1 setNumberOfLines:0];
[label2 setNumberOfLines:0];
[label1 setPreferredMaxLayoutWidth:240];
[label2 setPreferredMaxLayoutWidth:240];
NSString *sampleText = @"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";
[label1 setText:sampleText];
[label2 setText:sampleText];
[self.view addSubview:_scrollView];
[_scrollView addSubview:label1];
[_scrollView addSubview:label2];
NSArray *constraints;
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)];
[self.view addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label1]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label1)];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label2]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label2)];
[_scrollView addConstraints:constraints];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[label1]-[label2]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label1, label2)];
[_scrollView addConstraints:constraints];
}
return self;
}
ci sono diversi risultati di questo codice che penso siano dispari. Se si registra la scrollviewheight nel metodo viewDidLayoutSubviews
(dopo la super-chiamata), che è dove devono essere applicati tutti i vincoli, l'altezza sta riportando 0. Ciò che è strano è che la larghezza sta riportando un numero diverso da quello che mi aspetterei. Mi aspetterei che riportasse la larghezza della superview a causa del primo vincolo (ho persino provato a forzare la larghezza all'interno di quel vincolo con una priorità che è presumibilmente richiesta ma che comunque non ha funzionato).
A quanto ho capito, la dimensione del contenuto dello UIScrollView
deve essere impostata in base alle dimensioni intrinseche del suo contenuto, ma ciò non sembra avvenire.
Quindi, qualcuno sa cosa manca?
+1 per l'origine di lorem ipsum) – Stas