Horizontale Abhängigkeit funktioniert in einem UIScrollView nicht korrekt. (programmatische Einschränkungen)

8

Schnelle Erklärung.

Ich habe eine UIScrollView , das ist eine Unteransicht von "self.view". Meine UIScrollview , hat eine Unteransicht namens contentView

Alle meine anderen Objekte sind Teilansichten von contentView oder es ist sub-views

Ich habe alles richtig gesehen, mit Ausnahme von zwei Ansichten.

Sobald ich diese Ansichten in meine Einschränkungen eingefügt habe. Der gesamte contentView verschiebt sich nach links und unterbricht alles.

Hier ist ein Bild des Bildschirms mit der problematischen Ansicht (howManyIconView), es ist die blaue UIView , mit einem weißen Slack-Symbol in der Mitte. (unten links)

Um allen klar zu machen, dass es das contentView ist, das durcheinander kommt, habe ich% code_de einen roten Hintergrund gegeben.

Hier ist die gleiche Ansicht, ohne das contentView zu meiner Einschränkung hinzuzufügen.

Zum eigentlichen Code, der mit dem Problem zusammenhängt, beginnend von oben.

%Vor%

Und hier sind die Einschränkungen:

%Vor%

Die folgende Einschränkung ist diejenige, die alles durcheinander bringt. Sobald ich howManyIconView von dieser 1 Codezeile entferne, ist alles in Ordnung.

%Vor%

Ich habe dreifach überprüft, dass howManyContentView, howManyIconView und howManyIcon in keinem Code erwähnt werden, der in diesem Beitrag nicht gezeigt wird.

Hier ist, was ich versucht habe, mein Problem zu lösen

Zuerst habe ich versucht, eine andere Ansicht namens [howManyIconView(iconViewWidth)] zu erstellen, wobei ich HowManyInputView und iconView einfüge. Dann setze ich das als einzige Einschränkung auf. (gleiches Ergebnis)

Danach habe ich versucht, alles, was mit der UITextField in der IconView zu tun hatte, zu entfernen. Um zu sehen, ob es etwas mit dem Label zu tun hat. (Gleiches Ergebnis)

Dann habe ich versucht, eine neue Sichtweise zu erstellen. und gab es ähnliche (aber nicht die gleichen) Positionsbeschränkungen (dasselbe Problem), diese Ansicht hatte auch keine Unteransichten, was weiter zeigt, dass es die Ansicht ist und nicht die UILabel , die meine Probleme verursacht.

Also habe ich versucht, meine horizontale Abhängigkeit in 2 aufzuteilen. Vorher, wie Sie im Code sehen können. Ich gab ihm eine Breite und eine horizontale Beschränkung in der gleichen Codezeile. Also habe ich zwei verschiedene Constraint-Linien dafür erstellt, eine für die horizontale und eine für die horizontale Position. (gleiches Ergebnis)

An diesem Punkt waren mir die Ideen ausgegangen. Also habe ich meinen Abgeleiteten Datenordner gelöscht und mein Projekt bereinigt. (funktioniert immer noch nicht)

Als nächstes habe ich versucht, die Einschränkungen für die problematische Ansicht auszudrucken. Verwenden Sie UILabel wie folgt:

%Vor%

und das ist was die Konsole ausgibt:

%Vor%

Es sei denn, ich lese das falsch. Es sieht so aus, als ob die iconView nur eine Größeneinschränkung von (50) und nicht die tatsächliche horizontale Positionsbeschränkung erhält. Obwohl es korrekt neben meinem constraintsAffectingLayoutForAxis platziert wurde?

Warum dies geschieht, ist immer noch ein Mysterium, so weit ich sehen kann, sollte meine horizontale Positionierungsbeschränkung in Ordnung sein. Keine Fehler bekommen. Aber die Ursache meines Problems hoffentlich zu lösen, wird helfen, es zu lösen.

Jede Hilfe wäre sehr willkommen! (Keiner meiner Versuche hat Fehler in der Konsole verursacht.)

    
Mark L 18.03.2015, 11:09
quelle

1 Antwort

2

Es gibt 2 mögliche Fehler, die ich sehe:

  1. Ich sehe keine Einschränkung für contentView links und rechts. Sie sollten beide null sein, glaube ich. Andernfalls wird die Position von contentView in der scrollView zufällig sein. Dies sollte behoben werden, indem H:[contentView(contentWidth)] durch H:|[contentView(contentWidth)]|

  2. ersetzt wird
  3. Die Verwendung von self.view.bounds.width für contentView width kann etwas riskant sein - abhängig davon, welche Methode Sie aufrufen. Sind Sie sicher, dass es der Bildschirmgröße entspricht?

Beachten Sie, dass es im Allgemeinen einfacher ist, Einschränkungen im Interface Builder einzurichten, da sie immer vor fehlenden Beschränkungen warnen.

    
Sulthan 22.03.2015, 17:44
quelle