2017-02-15 2 views
0

ich verwende Xcode 8.2, Swift 3.Wie funktioniert das Layout der iOS-Bildschirmgeometrie?

Ich versuche programmatisch eine UIViewController mit einigen Text (und in Zukunft einige Grafik) Inhalt auf dem Bildschirm zu erstellen. Normalerweise wäre das mit dem Storyboard recht einfach, aber da dieser ViewController programmatisch erstellt wird, muss ich so arbeiten.

Hier ist mein Code so weit:

let detailViewController = UIViewController() 
detailViewController.view.backgroundColor = UIColor.white 

let screenSize = UIScreen.main.bounds 
let screenWidth = screenSize.width 
let screenHeight = screenSize.height 

let titleLabel = UILabel(frame: CGRect(x: 20, y: 20, width: screenWidth, height: 20)) 
titleLabel.center = CGPoint(x: screenWidth/2, y: 100) 
titleLabel.backgroundColor = UIColor.red 
titleLabel.textAlignment = .center 
titleLabel.text = "Scan Results" 
titleLabel.font = UIFont.boldSystemFont(ofSize: 14) 

let myField: UITextView = UITextView (frame: CGRect(x: 50, y: 50, width: screenWidth, height: 300)) 
myField.center = CGPoint(x: screenWidth/2, y: 250) 
myField.backgroundColor = UIColor.green 

myField.text = <really long string here> 

detailViewController.view.addSubview(titleLabel) 
detailViewController.view.addSubview(myField) 

Und das ist, was ich sehe:

![enter image description here

Dies viele Fragen für mich stellt sich, wie ich, wie dies zu verstehen versuche, Layout funktioniert, kann aber keine Hilfe finden, die für mich Sinn macht.

Meine screenWidth und screenHeight ist 375 und 667 jeweils. Ich benutze ein iPhone 7. Ich habe meine titleLabel in der Mitte aber unter y: 100 positioniert. Aber wo das Etikett endete, sieht nicht wie 1/6 des Weges nach unten aus, da die Höhe des Bildschirms 667 ist.

Wie funktioniert also die textuelle Positionierung? Ich weiß, dass die obere linke der Ursprung ist, aber das ist es auch.

Auch starte ich mein Textfeld bei x: 50, y: 50 mit einer Breite von screenWidth. Also, warum fließt der Text von der Seite der Seite über, anstatt herum zu wickeln?

Vielen Dank für jede Hilfe.

+0

Ändern Sie die Farbe des Hintergrunds Ihres Etiketts, so dass Sie sehen können, was besser läuft. Wenn das Label den gesamten leeren Platz einnimmt, dann ist das etwas das richtige Verhalten, Text befindet sich immer in der vertikalen Mitte des Labels, und es ist wahrscheinlich nur eine einzige Zeile gesetzt. – Fonix

+0

oh warte, warum ist myField ein ' UITextFeld'? willst du ein 'UITextView' verwenden? – Fonix

+0

Gutes Auge. Lassen Sie mich diese Änderungen vornehmen und meine Frage aktualisieren. – noblerare

Antwort

1

Ich denke, wenn Sie den Rahmen der verschiedenen Ansichten (über den Konstruktor oder sonst) einstellen, setzen Sie nicht auch die .center, es wird seine x-und y-Positionen beeinflussen, warum ihre Positionierung ist aus

1

Sie haben Einschränkungen programmatisch hinzufügen, zum Beispiel:

NSLayoutConstraint(item: myField, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: detailViewController, attribute: NSLayoutAttribute.leadingMargin, multiplier: 1.0, constant: 20.0).isActive = true 

myField.widthAnchor.constraint(equalToConstant: 200).isActive = true 
myField.heightAnchor.constraint(equalToConstant: 100).isActive = true 

prüfen diese Antwort für weitere Informationen: https://stackoverflow.com/a/36263784/4077559. Ich denke, das ist, was Sie suchen

Verwandte Themen