2017-02-15 17 views
0

我使用的Xcode 8.2,斯威夫特3iOS屏幕几何图形的布局如何工作?

我想以编程方式创建UIViewController一些文本(和将来,一些图形)屏幕上的内容。通常情况下,这与Storyboard很容易做到,但由于这个ViewController是以编程方式创建的,所以我必须这样工作。

这是到目前为止我的代码:

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) 

这是我所看到的:

![enter image description here

这引发了很多问题要问我,因为我想了解如何布局的作品,但似乎无法找到任何对我有意义的帮助。

我的screenWidthscreenHeight分别是375和667。我正在使用iPhone 7.我已将titleLabel定位在中心位置,但位于y: 100。但是,如果标签的最终结果看起来不像1/6,因为屏幕的高度为667.

那么文本定位究竟如何工作?我知道左上角是原点,但这就是它。

此外,我开始我的文本字段在x: 50, y: 50宽度为screenWidth。那么为什么文本溢出页面而不是环绕?

非常感谢您的帮助。

+0

更改您的标签背景的颜色,以便您可以看到发生了什么更好。如果标签占据了整个空白空间,那么这有些是正确的行为,文本始终在标签的垂直中心,并且可能只设置为单行。 – Fonix

+0

哦,等等,为什么myField是' UITextField'?你的意思是使用'UITextView'吗? – Fonix

+0

好眼睛。让我进行这些更改并更新我的问题。 – noblerare

回答

1

我认为如果你设置不同视图的框架(通过构造函数或其他),不要设置.center以及它会影响它的x和y位置,因此为什么他们的位置是关闭的

1

你必须以编程方式添加约束,例如:

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 

检查这个答案详细信息:https://stackoverflow.com/a/36263784/4077559。我认为这是你正在寻找的