2016-09-13 2 views
0

Wie die Frage besagt, als ich versuchte, eine Bildansicht innerhalb einer UIView-Klasse, eine Ecke Radius seiner Rahmenhöhe durch 2 geteilt zu haben, funktionierte es nicht, also entschied ich mich, die zu drucken Rahmenhöhe und es war 0.Frame Höhe druckt 0

Die Höhe oder Breite für jede Ansicht in dieser Klasse druckt 0 Ich weiß nicht warum ... Vielen Dank im Voraus für Ihre Antworten.

+0

Haben Sie Ansichten mit self.view.addSubView (yourView) hinzugefügt –

+0

@MatGrlt seit der Klasse ein UIView Ich habe nur addSubview (view) geschrieben – Rialcom

+0

Wo instanziieren Sie Rahmen deiner Subview? –

Antwort

0

fand ich das Problem. Beim Aufruf der UI-View-Klasse übergab ich den aktuellen Frame dieser Ansicht nicht. Wenn dieser Klasseninitialisierer ausgeführt wurde, war der Rahmen immer 0.

0

Standardmäßig hat eine Ansicht keinerlei Größe. Sie müssen eine Art von Einschränkungen oder den Rahmen der Ansicht festlegen.

1. Constraints: Wenn Einschränkungen in viewDidLoad() Einstellung wird die Ansicht nicht sofort eine Größe gewinnen. Um die Größe zu lesen, müssen Sie sie in einer anderen Funktion namens viewDidLayoutSubviews() lesen. Diese Funktion wird aufgerufen, nachdem alle Ansichten angelegt wurden. Hier ist ein Beispiel, wo die Ansicht, die die Größe der übergeordneten Ansicht gewinnen:

var newView:UIView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     newView = UIView() 

     newView!.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(newView!) 

     newView!.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true 
     newView!.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true 
     newView!.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true 
     newView!.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true 
    } 


    override func viewDidLayoutSubviews() { 
     print(newView!.frame) 
    } 

2. Rahmen: Durch die Einstellung der Ansichten Rahmen direkt, können Sie lesen, sofort seine Größe. Hier ist ein Beispiel, bei dem die Rahmen der Sicht auf die gleichen Grenzen wie die übergeordneten Ansicht festgelegt ist:

var newView:UIView? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     newView = UIView() 

     newView?.frame = view.bounds 

     newView!.translatesAutoresizingMaskIntoConstraints = false 
     self.view.addSubview(newView!) 

     print(newView!.frame) 
    } 
+0

Die Sache ist, dass ich in einer UIView bin, also sind diese Methoden nicht verfügbar mich. – Rialcom

+0

Aber haben Sie sicher eine Art 'UIViewController'? Erstellen Sie eine Funktion in der 'UIView', die in' viewDidLayoutSubviews() 'aufgerufen wird und den Eckenradius einrichtet. – Christoph

+0

Ich fand das Problem, in der uiview-Klasse Initialisierer überschrieb ich den Rahmen, so übergeben ich nur den Rahmen beim Aufruf der uiview in der Diskussion. – Rialcom

Verwandte Themen