2016-07-04 17 views
0

In meinem Projekt verwende ich AutoLayOut, gibt es eine UIView, die SubView Hauptansicht ist, habe ich seine Breite (mit Einschränkungen) gleich SuperView 2: 3 Breite und seine Höhe gleich seiner Ansicht. Ich brauche eine kreisförmige Ansicht, also setze ich den cornerRadius auf heightOfView/2. Es gibt ein 1: 1 Seitenverhältnis der Höhe und Breite der Ansichten. Ich habe alsErhalten Höhe Wert von NSLayoutConstraint

Outlet dieser constrain erstellt
@IBOutlet weak var circleHeight: NSLayoutConstraint 

Jetzt möchte ich seine Höhe oder Breite zu den acces aber ich bin gwtting nicht Istwert,

circleHeight.firstItem.frame.width 

Ich erhalte Wert, den ich von Storyboard gespeichert haben, Es gibt etwas, das ich vermisse, aber ich konnte es nicht herausfinden

enter image description here Ausgewählte Ansicht sollte kreisförmig sein. aber wenn ich seine constains Werte drucke, gibt es Höhe und Breite als 214 nur

+0

können es ändern, so dass Sie den Radius aktualisieren müssen, wenn die Rahmenänderungen, die ist, wenn Subviews/Subschichten aus gelegt werden. – Wain

+0

aber die Werte des Rahmens ändern sich nicht –

+0

Wo/wann greifen Sie auf den Rahmen zu? Wie Wain sagt, können sie sich ändern, wenn die Layout-Engine ausgelöst wird. Außerdem zeigt das Bild unten eine Constraint-Verletzung an - dies verhindert möglicherweise, dass Ihr Layout korrekt funktioniert –

Antwort

0
  1. Ich glaube, Sie könnten Wert in viewWillAppear oder abgeholt werden ViewDidLoad aber Ansichten Rahmen nicht aktualisiert, wenn diese Methode bekommt genannt
  2. So müssen Sie die Breite oder Höhe in ViewDidAppear Methode holen.
  3. Wenn die Höhe oder Breite in ViewDidLayoutSubViews erhalten, wird die Leistung abgebaut, wie es oft aufgerufen wird.

Hier-Code

override func viewDidAppear(animated: Bool){ 
     super.viewDidAppear(animated) 
     let viewHeight = CGRectGetHeight(yourView.frame) 
     yourView.layer.cornerRadius = viewHeight/2 
     yourView.layer.masksToBounds = true 
    } 
0

Eine Einschränkung hat nicht Höhe oder Breite, nur Beziehungen, Prioritäten und konstante Werte, abhängig davon, wie Sie die Beschränkung selbst einstellen.

Um die Höhe des subview Sie interessiert sind, müssen Sie wie immer den Zugriff auf:

<uiview_outlet>.frame.size.height 

Hoffe, es hilft.

1

Sie können IBOutlet für diese UIView erstellen, die eine Kreisform haben sollte. dann in viewDidLayoutSubviews() -Methode können Sie deren Höhe lesen und Kreis machen:

override func viewDidLayoutSubviews() { 
    let viewHeight = CGRectGetHeight(yourView.frame) 
    yourView.layer.cornerRadius = viewHeight/2 
    yourView.layer.masksToBounds = true 
}