Kollegen, ich habe Probleme mit AutoLayout in Interface Builder (Xcode 5 / iOS 7). Es ist sehr einfach und wichtig, daher denke ich, dass jeder wissen sollte, wie das richtig funktioniert. Wenn dies ein Fehler in Xcode ist, ist es ein kritischer!
Wenn ich also eine solche Ansichtshierarchie habe, stoße ich auf folgende Probleme:
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
Das UIScrollView hat feste Einschränkungen, z. B. 50 Pixel von jeder Seite (kein Problem). Dann füge ich dem UILabel eine Top Space-Einschränkung hinzu (kein Problem) (und ich kann sogar Höhe / Breite des Etiketts anheften, ändert nichts, sollte aber aufgrund der Eigengröße des Etiketts nicht erforderlich sein)
Das Problem beginnt, wenn ich dem UILabel eine nachfolgende Einschränkung hinzufüge:
Beispiel: Leerzeichen nach: Übersicht Gleich: 25
Jetzt treten zwei Warnungen auf - und ich verstehe nicht warum:
A) Mehrdeutigkeit der Größe des scrollbaren Inhalts (Die Bildlaufansicht weist eine mehrdeutige Höhe / Breite des scrollbaren Inhalts auf.)
B) Falsch platzierte Ansichten (Beschriftung erwartet: x = -67 Ist: x = 207
Ich habe dieses minimale Beispiel in einem neuen Projekt gemacht, das Sie herunterladen können, und einen Screenshot angehängt. Wie Sie sehen können, erwartet Interface Builder, dass sich das Label außerhalb der Grenze von UIScrollView befindet (das orange gestrichelte Rechteck). Wenn Sie den Rahmen des Etiketts mit dem Tool zum Beheben von Problemen aktualisieren, wird er genau dorthin verschoben.
Bitte beachten Sie: Wenn Sie die UIScrollView durch eine UIView ersetzen, ist das Verhalten wie erwartet (der Rahmen des Etiketts ist korrekt und entspricht der Einschränkung). Es scheint also entweder ein Problem mit UIScrollView zu geben, oder ich verpasse etwas Wichtiges.
Wenn ich die App starte, ohne den von IB vorgeschlagenen Rahmen des Labels zu aktualisieren, ist sie genau dort positioniert, wo sie sein soll, und die UIScrollView ist scrollbar. Wenn ich den Frame aktualisiere, ist das Label nicht sichtbar und die UIScrollView scrollt nicht.
Hilf mir, Obi-Wan Kenobi! Warum das mehrdeutige Layout? Warum die verlegte Ansicht?
Sie können das Beispielprojekt hier herunterladen und versuchen, herauszufinden, was los ist: https://github.com/Wirsing84/AutoLayoutProblem
UIScrollView
direkt zu verwenden. Verwenden Sie stattdessen UICollectionView
oder UITableView
so viel wie möglich, meistens ist mit diesem Element alles möglich und es gibt auch Einfachheit, Lesbarkeit und Wiederverwendbarkeit !!!