2017-12-22 7 views
0

Ich habe einige Code, wo ich in einem "schließen" UIButton zu der UIPageController.view hinzufügen, und das funktioniert super.Line-up CenterYAnchor von UIButton zu UIPageControl Swift

ARBEITSCode:

class func closeButton(_ pageController: UIPageViewController) -> UIButton { 

    let button = UIButton() 

    button.setTitleColor(UIColor.white, for: UIControlState()) 
    button.setTitle("Close", for: UIControlState()) 
    button.titleLabel!.font = UIFont.systemFont(ofSize: 15) 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignment.left 
    button.translatesAutoresizingMaskIntoConstraints = false 

    pageController.view.addSubview(button) 

    button.widthAnchor.constraint(equalToConstant: 50).isActive = true 
    button.heightAnchor.constraint(equalToConstant: 36).isActive = true 
    button.trailingAnchor.constraint(equalTo: pageController.view.trailingAnchor).isActive = true 
    button.bottomAnchor.constraint(equalTo: pageController.view.bottomAnchor).isActive = true 

    return button 
} 

Aber dann testete ich meinen Code auf dem iPhone X-Simulator und die UIPageControl ist viel höher aus dem Boden als die anderen iPhones. So, jetzt, dass schließen Knopf ist gerade in der unteren abgerundeten Ecke und die UIPageControl ist viel höher.

So dann habe ich versucht, die die UIPageControl mit Referenzierung:

let pageControl: UIPageControl = UIPageControl.appearance() 

Und dann die button.bottomAnchor.constraint... mit ersetzen:

button.centerYAnchor.constraint(equalTo: pageControl.centerYAnchor).isActive = true 

Aber dies bewirkt, dass ein Fehler ausgelöst werden. Ich habe versucht, die UIPageControl.frame zu drucken, und es ist 0,0,0,0. Ich nehme also an, dass das etwas damit zu tun hat.

Gibt es eine Möglichkeit, eine Einschränkung für das UIPageControl zu machen?

Antwort

1

Wenn Sie eine benutzerdefinierte Ansicht Versuch verwenden, um Ihre Einschränkung in layoutSubviews() -Methode zu aktualisieren oder in viewDidLayoutSubviews() -Methode Ihrer View-Controller:

func layoutSubviews() { 
    super.layoutSubviews() 
    button.centerYAnchor.constraint(equalTo: pageControl.centerYAnchor).isActive = true 
} 
+0

ich die Funktion in zwei Teile aufgeteilt wird. Eine, die die Schaltfläche erstellt, und eine, die sie einschränkt. Der erste Teil, der es erstellt, ich rufe immer noch in der 'ViewDidLoad', aber der zweite Teil, der einschränkt, ich rufe' viewDidLayoutSubviews'. Du hast mir einen Vorschlag gemacht. Die meisten könnten wahrscheinlich alles in 'viewDidLayoutSubviews' schreiben, aber ich habe einen anderen Teil, der entscheidet, ob'IsHidden = true' ist und der Button unter 'ViewDidLoad' erstellt werden muss. Danke nochmal! –

+0

Gute Wahl;) In viewDidLayoutSubviews erhalten Sie Ihren pageControl-Frame und deshalb können Sie dort Ihre Constraints aktualisieren, anstatt den Teil, wo Sie Ihre Schaltfläche erstellen, ist es richtig, in viewDidLoad aufzurufen. Bitte schön ;) –