2013-03-26 8 views
6

Ich habe bereits gelesen, die iOS6 Release Notes und einige der verwandten Themen für Autolayout + UIScrollview hier, aber ich habe einen seltsamen Fehler, den ich nicht wissen, wie zu lösen.Auto Layout UIScrollView Einschränkungen seltsames Verhalten

die Hierarchie der Ansicht ist:

- View 
-- UIScrollView 
---- UIImageView 
---- UILabel 

I die Elemente in der Ansicht durch Interface Builder hinzugefügt, mit Automatische Anordnung ON gehalten und die Standardbeschränkungen.

Mein Label hat einen dynamischen Text und seine Höhe ist entbehrlich (Anzahl der Zeilen = 0 in IB konfiguriert). Ich möchte, dass sich die Bildlaufansicht automatisch an die Höhe der Bildansicht + des Labels anpasst. Hier

ist der Code für die zugehörige View-Controller-Klasse:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.imageView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.label.translatesAutoresizingMaskIntoConstraints = NO; 

    self.imageView.image = [UIImage imageNamed:@"image.png"]; 

    self.label.text = @"Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text END"; 
    [self.label sizeToFit]; 

    NSDictionary *viewsDictionnary = NSDictionaryOfVariableBindings(scrollView, imageView, label); 
    [self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]-20-[label]-10-|" options:0 metrics:0 views:viewsDictionnary]]; 

    self.imageView.userInteractionEnabled = YES; 
    [self.imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]]; 
} 

- (void)tap 
{ 
    [self.navigationController pushViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View2"] animated:YES]; 
} 

Wie Sie sehen, ich bin eine vertikale Einschränkung für die Scroll-Ansicht hinzufügen. Das scheint funktioniert gut, aber ich habe die folgende Meldung in der Konsole:

2013-03-26 16: 24: 49,072 Test [34704: 11303] kann nicht gleichzeitig Einschränkungen erfüllen. Wahrscheinlich mindestens eine der Einschränkungen in der folgenden Liste ist eine, die Sie nicht wollen. Versuchen Sie Folgendes: (1) Sehen Sie sich jede Einschränkung an und versuchen Sie herauszufinden, was Sie nicht erwarten; (2) finde den Code , der die unerwünschte Einschränkung oder die Nebenbedingungen hinzugefügt und behoben hat. (Hinweis: Wenn Sie sehen, dass Sie NSAutoresizingMaskLayoutConstraints nicht verstehen, finden Sie in der Dokumentation für die UIView Eigenschaft translatesAutoresizingMaskIntoConstraints) ( „“, „“)

Wird durch Zwang zu brechen zu erholen versuchen

und nun der konkrete Fehler: Wenn ich auf die nach unten scrollen, ich auf das Bild klicken Sie dann auf den zweiten Blick zu gehen, und klicken Sie auf die aktuelle Ansicht zurückzukehren, beginnt die Scroll-Ansicht werden aus der Präzedenzfall Position wie es war die Spitze der v iew. Und ich kann nicht scrollen, um die Ansicht zu sehen.

Es tut mir leid ich habe nicht genug Ruf Bilder posten, aber Sie können das Beispielprojekt hier herunterladen um den Fehler zu reproduzieren: https://docs.google.com/file/d/0B-sCDWMvn-KGS19sUkZnUFdWWTg/edit?usp=sharing

Danke für die Hilfe, Lukas

EDIT Workaround für den Fehler hier: UIScrollView wrong offset with Auto Layout

Antwort

1

Nach der Nachricht in der Konsole. Ihre vertikalen Einschränkungen von xib stehen in Konflikt mit Einschränkungen, die Sie im Code hinzugefügt haben. Wenn Sie nur den vertikalen Abstand zwischen imageView und label ändern möchten, dann tun Sie es in Xib.

In Bezug auf Fehler. Hier ist die Lösung tap here.

+0

Danke, dies ist der gleiche Fehler wie in dem Link beschrieben, den Sie angegeben haben. Workarounds sind dort vorgesehen. – lukas

Verwandte Themen