2016-06-22 12 views
1

Ich muss sehen: view_1 und view_2. view_1 height ist proportional zur Höhe des Hauptansicht-Controllers und ich füge view_2 programmatisch als Unteransicht von view_1 mit einer proportionalen Höhe hinzu.Wie erhält man die aktuelle Größe einer Unteransicht, wenn sich die Gerätegröße in swift ändert?

Problem

, wenn die Gerätegröße ändert sich von iPhone sagen 6 bis iPhone 5, die VIEW_1 richtig einstellen, aber seine Höhe ich an eine Funktion bin seine subview view_2 zu ziehen, ist nach wie vor, was in Interface Builder gesetzt wurde und so ist es außerhalb der Grenzen in iPhone 4 Umzug von iPhone 6

So möchte ich wissen, wie bekomme ich die richtige Größe einer Ansicht, die Größe automatisch anpassen, um das aktuelle Gerät zu passen?

Antwort

5

Die Größe der Ansicht festgelegt wird erst Auto Layout läuft. Ihre erste Gelegenheit, die richtige Größe zu bekommen, ist in viewDidLayoutSubviews:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    // access view size here 
} 

Hier ist ein vollständiges Beispiel, das eine zweite Ansicht als ein Subview der ersten Ansicht hinzufügt. Die rote Ansicht wurde im Storyboard hinzugefügt. Es ist horizontal und vertikal zentriert und seine Höhe/Breite beträgt 50% seiner Superansicht.

Die gelbe Ansicht wird programmgesteuert hinzugefügt. Der Rahmen wird aus dem Rahmen der roten Ansicht berechnet, um 50% der Breite der roten Ansicht zu betragen.

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var view1: UIView! 
    var view2: UIView? 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     if view2 == nil { 
      view2 = UIView() 
      view2?.backgroundColor = .yellowColor() 
      view1.addSubview(view2!) 
     } 

     let width = view1.frame.size.width 
     let height = view1.frame.size.height 

     let frame = CGRect(x: width * 0.25, y: height * 0.25, width: width * 0.5, height: height * 0.5) 

     view2?.frame = frame 
    } 
} 

Nicht, dass viewDidLayoutSubviews wird mehrmals aufgerufen, so dass Sie darauf, nicht view2 jedes Mal, sie genannt wird hinzuzufügen nehmen müssen. Deshalb überprüft der Code, ob view2 hinzugefügt wurde.


iPhone 4s Simulator Portrait


iPhone 5s Simulator Landscape


iPhone 5s Rotation exmaple

+0

Noch immer die alte Größe, die im Interface Builder festgelegt wurde: - /. – irkinosor

+0

Sind Sie sicher, dass Sie 'viewDidLayoutSubviews' und nicht' viewWillLayoutSubviews' überschrieben haben? – vacawama

2

Versuchen Sie dies, können Sie die Bildschirmgröße des Geräts finden.

let screenSize: CGRect = UIScreen.mainScreen().bounds 
let screenWidth = screenSize.width 
let screenHeight = screenSize.height 
+0

ich aber die Größe der Subview in dem Gerät nicht die Bildschirmgröße will, wenn seine Größe ändern und die Subview Größe durch das System eingestellt werden – irkinosor

1

Versuchen Sie, diese in viewDidLoad Zuerst tun müssen Sie Ansicht eines Rahmens

einstellen
view_1.frame = CGRectMake(0 , 0, self.view.frame.width, self.view.frame.height) 

dann gesetzt Rahmen von view_2

view_2.frame = CGRectMake(0 , 0, view_1.frame.width, view_1.frame.height) 
Verwandte Themen