2016-06-14 21 views
0

Ich habe eine UIView, die in einer ScrollView platziert ist. Die UIView hat 4 Einschränkungen, die ich in der Storyboard gesetzt haben:Wie zentriert man eine UIView in einem UIScrollView bei Verwendung von Auto-Layout horizontal?

  • Equal Breite To Scroll (w/a 0,98 Multiplikator)
  • gleicher Höhe Um Scroll (w/a 0,98 Multiplikator)
  • horizontal zentriert innerhalb Scroll (w/constant = 0)
  • vertikal innerhalb Scrollzentrierten (w/constant = 0)

Die scrollView hat die regulär nachlaufenden, führenden, oberen, & unteren Randbedingungen mit allen Konstanten = 0.

Ich habe auch die folgende Eigenschaft für meine scrollView festgelegt.

self.scrollView.contentSize.width = self.scrollView.frame.size.width + 30 

Wie kann ich die UIView in meinem scrollView zentrieren?

Hinweis: Ich habe Zugriff auf eine self.horizontalCenterConstraint.constant, die steuern kann, wo sich die UIView innerhalb der scrollView befindet. Ich habe versucht,

self.horizontalCenterConstraint.constant = (self.scrollView.contentSize.width/2) 

, aber dies zentriert nicht wirklich die UIView in der ScrollView.

+0

in welcher Methode stellen Sie die 'contentSize' und' horizontalCenterConstraint' ein? (viewDidLoad, viewWillAppera ...) – tbilopavlovic

+0

Dies alles geschieht innerhalb einer UITableViewCell, also habe ich die Zelle überschrieben traitCollectionDidChange (..), und das ist, wo ich sie gesetzt habe. Auch in watchFromNib (..) zunächst. – AppreciateIt

+0

Ich denke, Sie müssen Trailing, Leading, Top und Bottom zwischen Ansicht und ScrollView hinzufügen, damit scrollview berechnen kann, wie weit die Ansicht von contentSize Margen ist. – tbilopavlovic

Antwort

1

Ich empfehle, ContainerView als root Unteransicht von scrollView (führende, nachfolgende, oben, unten = 0 und gleiche Breite und Höhe als scrollView) und fügen Sie diese Ansicht, die Sie wollen.

  • scroll
    • containerView
      • YOUR_VIEW (gleichen Einschränkungen wie Sie bereits haben)

Jetzt können Scroll die Content berechnen wegen Beschränkungen der containerView , ein Und ich sehe, dass Sie self.scrollView.contentSize.width = self.scrollView.frame.size.width + 30 hinzugefügt haben, also setzen Sie einfach Breite von containerView breiter als scrollView und es wird horizontal scrollen ....

+1

Dies funktioniert, gab es eine Änderung, die ich gemacht habe, damit es funktioniert . Ich musste die horizontaleCenterConstraint.constant so einstellen, dass sie halb so groß war wie die EqualWidths.constant. Wenn zum Beispiel der scrollView 30 Punkte auf jeder Seite meiner UIView hätte, dann hätte ich die EqualWidths.constant = 30 und die horizontaleCenterConstraint.constant = 15. Auch der contentOffset von scrollView muss geändert werden, aber my scrollView erlaubt dies nicht (es gibt keine sichtbaren Änderungen). Vielleicht gibt es ein Missverständnis? – AppreciateIt

+0

Die manuelle Änderung des scrollView.contentoffset ist ziemlich ärgerlich, vor allem, weil er scheinbar nur dann funktioniert, wenn ich die scrollView von der Unterklasse abkopple und overlaySubviews (..) überschreibe. Es muss auch geändert werden, wenn eine Merkmalskollektion geändert wird, da sich der Offset jedes Mal ändert, wenn sich das Gerät dreht. – AppreciateIt