以编程方式(因为Interface Builder是由Satan设计的),如何将一个视图对象放在另一个视图对象下面,方法与Interface Builder按“最近邻居”定位视图对象的方式相同?
如果这是第一个视图对象:
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 :(得分: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”。
仅举例来说。