Ich habe ein Problem mit Einschränkungen in einem UIScrollView, das anscheinend iOS10-spezifisch ist. Ich habe anscheinend eine Lücke zwischen dem oberen Rand der Bildlaufansicht und der Inhaltsansicht auf der Innenseite, die an der Spitze haften soll.
Es scheint keine Lücke auf iOS 9 zu geben, aber auf iOS 10 wird die Lücke angezeigt.
In beiden Fällen ist die obere Bildlaufleiste an den unteren Rand der oberen Layout-Führung angeheftet, die perfekt mit dem unteren Rand der Navigationsleiste übereinstimmt. iOS 10 fügt eine Lücke zwischen der Oberkante der Bildlaufleiste und dem oberen Rand der Inhaltsansicht ein.
Ich könnte den oberen Teil der Bildlaufleiste an den oberen Rand des oberen Layout-Hilfslinien ausrichten, wodurch die Lücke unter der Navigationsleiste und die Inhaltsansicht gut ausgerichtet wären, aber auf iOS 9 würde die Inhaltsansicht darunter liegen Navigationsleiste, die unerwünscht ist.
Ich habe schnell einen Spielplatz Code erstellt, der das Problem unten zeigt. Gibt es etwas Offensichtliches, das mir fehlt? Was hat sich in iOS 10 geändert, um dies zu einem Problem zu machen, und wie kann ich es umgehen?
%Vor% In der ersten Einschränkung, die Sie festlegen, legen Sie sie auf topLayoutGuide
bottom
fest. Also von Apple Dokumentation hängt die bottom
der topLayoutGuide
davon ab, wie Sie Ihre Stacks erstellen Untersichten. Also in Ihrem Beispiel, wenn Sie es auf
self.view.addConstraint(NSLayoutConstraint(item: self.mainScrollView, attribute: .top, relatedBy: .equal, toItem: self.topLayoutGuide, attribute: .top, multiplier: 1, constant: 0))
funktioniert.
Aber ich verwende regelmäßig den oberen Teil meiner Unteransicht, damit ich keinen "Rand" habe. So könnte es aussehen: self.view.addConstraint(NSLayoutConstraint(item: self.mainScrollView, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0))
.
Ich hoffe, es hilft.
Ich hatte das gleiche Problem, in meinem Fall für einen UISearchController, bei dem das Hinzufügen der Ansicht dynamisch erfolgte, so dass ich keine Gelegenheit hätte, Einschränkungen hinzuzufügen. Ich musste nur manuell den contentInset
der Bildlaufansicht (was in meinem Fall eine Tabellenansicht war) einstellen und auf den Abstand vom oberen Bildschirmrand einstellen. Für Sie könnte es so aussehen:
Bitte beachten Sie, dass ich dies an swift von meinem Obj angepasst habe. C-Code entschuldigt sich also, wenn es etwas aus ist. Ich habe es in iOS 9 und 10 getestet und es sah in beiden richtig aus.
Tags und Links ios10 ios9 nslayoutconstraint