我正在努力实现自定义图表视图。设计要求图形在左边和右边有11个边距,有25个宽度相等的块,块之间的间距是2.毫不奇怪,它在iPhone 5s上显得非常完美以下。使用autolayout系统正确地发现每个块应该是10x10。
然而,当移动到6和6+时,事情就会崩溃。例如,在5个帧上计算宽度为12和12.5的帧。这是我从6中得到的。
通过手动进行数学计算并应用新屏幕尺寸的比例,宽度不会是整数,但是自动布局提出的是相当远的。我有一些关于如何解决这个问题的想法,但我不太清楚如何去做。这是我列出25列的代码:
var columns = Array()
var lastAddedColumn: UIView?
for index in 0...numberOfColumns - 1 {
let column = GraphColumn(frame: CGRectZero)
column.numberOfRectangles = 10
column.setTranslatesAutoresizingMaskIntoConstraints(false)
self.addSubview(column)
columns.append(column)
if let lastColumn = lastAddedColumn {
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[v1]-2-[v2]", options: NSLayoutFormatOptions.allZeros, metrics: nil, views: dictionaryOfNames(lastColumn,column)))
self.addConstraint(NSLayoutConstraint(item: column, attribute: .Width, relatedBy: .Equal, toItem: lastColumn, attribute: .Width, multiplier: 1, constant: 0))
}
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[v1]|", options: NSLayoutFormatOptions.allZeros, metrics: nil, views: dictionaryOfNames(column)))
lastAddedColumn = column
}
let firstColumn = columns.first!
let lastColumn = columns.last!
self.addConstraint(NSLayoutConstraint(item: firstColumn, attribute: .Left, relatedBy: .Equal, toItem: self, attribute: .Left, multiplier: 1, constant: 1))
self.addConstraint(NSLayoutConstraint(item: lastColumn, attribute: .Right, relatedBy: .GreaterThanOrEqual, toItem: self, attribute: .Right, multiplier: 1, constant: -1))
我正在使用的方法是每次从1-25循环创建一个列。该列在其前面的列右侧固定2个点,并且宽度也等于之前的列。最后,我将第一个和最后一个固定在超视图的左侧和右侧。超级视图通过故事板添加到场景中,并在超级视图的左侧和右侧固定11点。
我认为可能有用的是让利润变得灵活,但我不确定如何实现这一目标。我尝试降低11 pt let和right优先级并使用小于或等于但不起作用。真的我想要自动布局做的是做同等宽度的事情,如果它无法找到相等的宽度,那么它应该推出边距,直到可以这样做。我认为最让我感到高兴的是,系统报告它可以满足约束条件,但实际上它不能。