2016-07-16 21 views
0

Ich erstelle eine einfache App und ich habe drei Ansichten am unteren Rand des Bildschirms in zwei Reihen. Auf Landschafts-/Breitbildschirmen möchte ich die obere Reihe in die untere Reihe fallen lassen.Xcode Swift Moving UIElements basierend auf der Bildschirmgröße

|  Portrait  | |    Landscape    | 
| AAAAAAAAAAAAAAAAAAAA | |   AAAAAAAAAAAAAAAAAAAA   | 
| BBBBBBB  CCCCCCC | | BBBBBBB      CCCCCCC | 
------------------------ ----------------------------------------- 

Gibt es ein paar Zeilen Swift-Code, mit denen ich Folgendes tun kann?

If (left edge of A) > (right edge of B) then set the (bottom of A to the Bottom of B) 

Hinweise 1) A zentriert ist immer 2) B und C haben die gleiche Größe 3) B zur linken Kante befestigt ist 4) C zum rechten Rand befestigt ist

+0

Sie sollten bei https://developer.apple.com/library/ios/documentation/UIKit/Reference/ einen Blick UIStackView_Class_Reference/ –

+0

Ich habe dieses Dokument gelesen und sehe nicht, wie ich einen Stapel so konfigurieren kann, dass er die Zeile beschleunigt, wenn es sonst zwei Zeilen hat. Kannst du etwas konkreter angeben? –

Antwort

0

I haben eine Lösung für die Bewegung des Rahmens/Komponente gefunden, wenn der Bildschirm breit genug ist,

@IBOutlet weak var aaaVertPosition: NSLayoutConstraint! 

// in viewDidAppear 
moveAaaStack 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    moveAaaStack() 
} 

func moveAaaStack() { 
    let aaaFrame: CGRect = selectedAaaOutlet.frame 
    let bbbFrame: CGRect = selectedBbbOutlet.frame 
    let leftEdgeOfAAA = aaaFrame.origin.x 
    let rightEdgeOfBBB = bosFrame.origin.x + bosFrame.size.width 
    print("AAA = \(leftEdgeOfAAA) & BBB = \(rightEdgeOfBBB)") 
    if (leftEdgeOfAAA + 8 > rightEdgeOfBBB) { 
     print("*** Moving AAA Stack down ***") 
     aaaVertPosition.constant = 8 
    } else { 
     print("*** Moving AAA Stack up ***") 
     aaaVertPosition.constant = 68.5 
    } 
}