斯威夫特:如何根据宽度排列按钮?所有相等的间距?

时间:2017-08-23 19:22:53

标签: ios swift layout uiview size

好的,所以我有一个按钮数组,我根据分配给它们的文本调整宽度(使用sizeToFit()) - 这意味着一个带有“StackOverflow”的按钮,因为它的标题将比带有“Stack”的按钮长一个作为标题。

我有一个容器UIView,它是一个设定的宽度,高度是用(按钮的数量*每个按钮的高度)计算的,所以高度始终是正确的。

我需要以编程方式在容器视图上排列这些可变宽度按钮(没有约束,使用数学),这样就不会在右边缘上运行,这意味着它们或多或少地完全填满了容器视图的宽度。我成功地将所有按钮放在容器视图上的3行(不是宽度,只是按照数组顺序),如下所示:

//cont = container view
func organizeHashBtns()
    {
        var numPerRow = Int(3)
        var numRows = Int(hashButtons.count/numPerRow)
        var rowsAdded = Int(0)

        //just in order at first
        while rowsAdded < numRows {
            var index = rowsAdded*numPerRow
            //self.addSubview(cont)

            for i in index...index+3
            {
                hashButtons[i].center = CGPoint(x: (cont.bounds.width/3) * CGFloat(i), y: cont.bounds.height/2)
                cont.addSubview(hashButtons[i])
            }

            rowsAdded+=1
        }
    }

但是我无法弄清楚如何根据整个容器的宽度和宽度确定按钮的排列顺序。我怎样才能做到这一点?如何将较长的按钮与较短的按钮分组,以使满按钮的行全部大小相同?

1 个答案:

答案 0 :(得分:0)

UIStackView实际上是一件轻而易举的事情。我将其显示为在Interface Builder中构建它,但您可以轻松地在代码中复制相同的行为。诀窍在于垂直嵌套&gt;水平视图,并将内容分布设置为“Equal Spacing”。

enter image description here