2017-08-09 27 views
0

编程方式(因为Interface Builder是由Satan设计的),如何以同样的方式将一个视图对象置于另一个视图对象之下?以编程方式将视图对象放置在最近的邻居下方

如果这是第一个视图对象:

titleLabel.frame.size.width = view.frame.width - 32 
titleLabel.frame.origin.x = CGFloat(16) 
titleLabel.frame.origin.y = CGFloat(titleMargin + 32) 

我怎么会第二视图对象位置正下方呢?我必须创建一个函数来获取它上面的所有东西的高度,并将其设置为顶部边距?看起来很粗糙。

subtitleLabel.frame.size.width = view.frame.width - 32 
subtitleLabel.frame.origin.x = CGFloat(16) 
subtitleLabel.frame.origin.y = ??? 

我预计解决方案比例子的设计要复杂得多。

+0

使用视图之间的关系而不是绝对坐标是采用基于约束的布局的好理由。 –

+0

这就是计划。 –

+0

不,您可以在代码中创建约束。请参阅:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints.html –

回答

1

嘛,不使用约束和自动布局(这是完全独立IB的,顺便说一句),更改最后一行:

titleLabel.frame.size.width = view.frame.width - 32 
titleLabel.frame.origin.x = CGFloat(16) 
titleLabel.frame.origin.y = CGFloat(titleMargin + 32) 

subtitleLabel.frame.size.width = view.frame.width - 32 
subtitleLabel.frame.origin.x = CGFloat(16) 
subtitleLabel.frame.origin.y = titleLabel.frame.origin.y + titleLabel.frame.size.height 

然后,当然,如果您要添加其他元素并希望它“请遵循以下”:

nextLabel.frame.size.width = view.frame.width - 32 
nextLabel.frame.origin.x = CGFloat(16) 
nextLabel.frame.origin.y = subtitleLabel.frame.origin.y + subtitleLabel.frame.size.height 

如果你有很多的元素,无论是跟踪y位置的变量或使用对象瓦尔维持“previousObject”和“currentObject”。

举个例子,无论如何。