【发布时间】:2017-05-14 01:41:37
【问题描述】:
好的,这似乎是一个比任何事情都重要的数学问题——我想生成给定数量的子视图,在一定距离上水平分布(没有设置间隙)。 我想在每一边设置一个边距,无论数量如何,都将视图平均分布在剩余空间中。这就是我所拥有的:
func spawnNodes(num: Int, margin: CGFloat)
{
let width = self.bounds.width - 2*margin
let length = Int(width)/num //20
var lastPos = margin
for i in 1...num {
let n = Node(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
n.center = CGPoint(x: margin+(CGFloat(i*length)/2), y: self.bounds.height*0.2)
lastPos = n.center.x
self.addSubview(n)
}
这里有什么问题?如何在每一边保持一个边距并平均分配视图?
采取 2:
for i in 1...num {
let n = Node(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
let space = (width - CGFloat(num)*n.bounds.width)/CGFloat(num-1)
n.center = CGPoint(x: lastPos+space+n.bounds.width+(CGFloat(i*length)/2), y: self.bounds.height*0.2)
lastPos = n.center.x
self.addSubview(n)
}
【问题讨论】:
-
不计算
length- 计算间距。n对象之间有n-1空格。spacing = (width - n*objectWidth)/(n-1)。现在将lastPos增加spacing+objectWidth -
你能把它写下来作为例子吗?
-
好的。在上面的编辑中,我尝试遵循您的建议,但没有奏效。如果您写出答案,我将不胜感激
-
试试n.center = CGPoint(x: lastPos+space+n.bounds.width), y: self.bounds.height*0.2)
-
您是否有理由不尝试仅以编程方式添加布局约束?