Ich habe eine Scroll-Ansicht in einem View-Controller verschachtelt, die in einem Container ruht. Der View-Controller, die eine bestimmte Klasse verwendet genannt ScrollingViewController
sieht wie folgt aus:iOS Auto-Layout-Einschränkungen und Frames funktioniert nicht
class ScrollingViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView! //outlet for the Scroll View
override func viewDidLoad() {
super.viewDidLoad()
// 1) Create the two views used in the swipe container view
var storyboard = UIStoryboard(name: "App", bundle: nil)
var subOne: SubProfileOneViewController = storyboard.instantiateViewControllerWithIdentifier("subone") as! SubProfileOneViewController
var subTwo: SubProfileTwoViewController = storyboard.instantiateViewControllerWithIdentifier("subtwo") as! SubProfileTwoViewController
// 2) Add in each view to the container view hierarchy
// Add them in opposite order since the view hierarchy is a stack
self.addChildViewController(subTwo);
self.scrollView!.addSubview(subTwo.view);
subTwo.didMoveToParentViewController(self);
self.addChildViewController(subOne);
self.scrollView!.addSubview(subOne.view);
subOne.didMoveToParentViewController(self);
// 3) Set up the frames of the view controllers to align
// with each other inside the container view
var adminFrame :CGRect = subOne.view.frame;
adminFrame.origin.x = adminFrame.width;
subTwo.view.frame = adminFrame;
// 4) Finally set the size of the scroll view that contains the frames
var scrollWidth: CGFloat = 2 * self.view.frame.width
var scrollHeight: CGFloat = 262
self.scrollView!.contentSize = CGSizeMake(scrollWidth, scrollHeight);
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Im Grunde, was passiert ist, dass zwei View-Controller, der diese Klasse verwenden SubProfileOneViewController
und SubProfileTwoViewController
jeweils als subOne
und subTwo
instanziiert wird. Diese werden dann als untergeordnete Elemente in die Bildlaufansicht eingefügt, um eine Oberfläche zu erstellen, über die der Benutzer nach rechts wischen kann, um auf eine andere Ansicht zuzugreifen (fast wie Snapchat). subOne
und subTwo
sollten nebeneinander liegen und der Benutzer sollte in der Lage sein, von einem zum nächsten zu blättern und umgekehrt.
Hier ist, was das alles wie auf meinem Drehbuch aussieht:
SubProfileOneViewController
und SubProfileTwoViewController
jeweils eine Ansicht (repräsentiert durch grüne und rote respectively) und jeweils die gleichen genauen Randbedingungen, die sind: Höhe = 262, Nachgestellte Platz für superview = 0, führender Platz für superview = 0, oberster Platz für superview = 0
Idealerweise sollten zwei Ansichten angezeigt werden, eine grün und eine rot, und der Benutzer sollte zwischen den beiden Ansichten wechseln können . Allerdings ist hier, was tatsächlich passiert:
Die grünen und roten Ansichten, die die gesamte Bildschirmbreite nicht nehmen und stattdessen in einen kleinen Splitter auf der linken Seite kondensiert, und die Mehrheit der Ansicht Controller sind weiß statt ihre jeweilige Farbe. Ich habe viele Dinge ausprobiert und bin mir nicht sicher, was ich falsch mache.
(Kredit für Code in ScollingViewController
auf Github lbrendanl geht, hier verbunden: https://github.com/lbrendanl/SwiftSwipeView)
Welche Einschränkungen haben Sie für die Containeransichten in scrollview verwendet? Können Sie ein Beispielprojekt posten? –
Ich würde eine einzelne UIView (contentView) zu Ihrem 'UIScrollView' hinzufügen. Fügen Sie dann Ihre Kind-Controller-Ansichten in der Inhaltsansicht hinzu. Fügen Sie Einschränkungen für Ihre untergeordneten Ansichten hinzu, die ihre obere und untere Seite an die Inhaltsansicht anheften. Für Ansicht eins, fixieren Sie das führende Element in die Inhaltsansicht und fixieren Sie das nachfolgende Element, um zwei führende Elemente anzuzeigen. Zum Schluss fixieren Sie die Ansicht von zwei nach der Inhaltsansicht. Um die Breite zu korrigieren, müssen Sie für die Breite der Ansicht eins und der Ansicht zwei Einschränkungen treffen: oder eine Breiteneinschränkung für die x2-Ansicht contentView hinzufügen und Einschränkungen für Ansicht eins und Ansicht zwei für gleiche Breite hinzufügen. –