iOS bekomme falschen Frame nach dem Set-Auto-Layout benutze SnapKit - ios, swift

Ich füge eine UIView ein UIStoryboard und binden Sie es an eine benutzerdefinierte UIView-Klasse namens testView. Als Nächstes erzeuge ich eine UIView namens "subView" in textView in require init Funktion,

Das ist mein Schritt

1 Initialisierung der Unteransicht

2 füge neue Unteransicht zu textView hinzu

3-fach automatisches Layout

4 set cornerRadius (view.frame.height / 2)

Nach dem Ausführen der App ändert sich der cornerRadius nicht

dann versuche ich den Rahmen von subView zu drucken, es bekommt (0,0,0,0)

Das ist mein Code

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

circelView = UIView()
self.addSubview(circelView)
circelView.snp_makeConstraints(closure: { (make) -> Void in
make.size.equalTo(80)
make.top.equalTo(self.snp_top)
make.right.equalTo(self.snp_right)
})
print(circelView.frame) //get wrong frame
circelView.layer.cornerRadius = circelView.frame.size.height / 2
circelView.layer.masksToBounds = true
}

Antworten:

2 für die Antwort № 1

Ihre Ansicht hat beim Drucken des Rahmens und beim Festlegen des Eckenradius keine Zeit gehabt. Wenn Sie eine AutoLayout-Einschränkung hinzufügen, wird die Ansicht nicht automatisch ausgerichtet.

Um das richtige Ergebnis zu erhalten, müssen Sie Ihren Eckradius nach dem Layout der Ansicht festlegen. Dies garantiert, dass Sie einen Rahmen haben, der durch Ihre AutoLayout-Einschränkungen eingeschränkt ist.

Platzieren Sie dazu in "viewDidLayoutSubviews" jeden Code, der den richtigen Frame benötigt:

override func viewDidLayoutSubviews() {
print(circelView.frame) // The frame will have been set
circelView.layer.cornerRadius = circelView.frame.size.height / 2
}

viewDidLayoutSubviews() ist eine Methode auf UIViewController die Sie überschreiben können, finden Sie in der Dokumentation Hier.


Speisekarte