以编程方式向UIStackView

时间:2017-01-24 01:43:14

标签: swift constraints uistackview

我在main.storyboard上创建了StackView,我的想法是添加一些常量尺寸40x40的按钮,上面有图像(原来是400x400px,但是它们应该按比例缩小以填充40x40)并且它们应该像这样堆叠: (堆栈视图是看不见的,但我在图片上标记为红色,它在动物所在的右上方170x50空间)

the stack view that should be populated with 40x40 buttons

所以简而言之:所有按钮(带有动物图片)应该是相同尺寸的40x40并且填充到左侧(或右侧),它们之间的间距类似于2px。

在代码中我写了这个:

func setupIcon(iconNumber:Int) -> UIButton{
        myImageButton = UIButton()
        myImageButton.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        myImageButton.addTarget(self, action: #selector(self.pressed), for: .touchUpInside)
        myImageButton.isUserInteractionEnabled = false
        //myImageButton.backgroundColor = UIColor.gray

        let widthConstraint = NSLayoutConstraint(item: myImageButton, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 40)
        let heightConstraint = NSLayoutConstraint(item: myImageButton, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 40)
        NSLayoutConstraint.activate([widthConstraint, heightConstraint])

        switch(iconNumber){
        case 0:
            myImageButton.setImage(UIImage(named: "hamster")!, for: .normal)
            return myImageButton
        case 1:
            myImageButton.setImage(UIImage(named: "dog")!, for: .normal)
            return myImageButton

        ...

        default:
            myImageButton.setImage(UIImage(named: "hamster")!, for: .normal)
            return myImageButton
        }
    }

返回UIButton,然后通过调用:

添加到我的StackView
cell.iconStackView.addArrangedSubview(setupIcon(iconNumber: pett.pic))

在我的StackView设置上我有:
轴:水平
对齐:中心
分布:等间距

内容模式:
语义:未指定

但是这给了我这些按钮的这种行为:

enter image description here

正如您所看到的,有几个问题:
1)当只有一个按钮存在时,我添加的约束不再起作用 2)我无法弄清楚我应该如何设置我的StackView设置以使它们彼此靠近并向右移动,剩下的空间留在左边空白

你可以帮我解决一下这些按钮的效果吗? 感谢。

注意:每个单元格都带有这些数字" 13:00"等具有不同数量的按钮。我的目标是让所有动物都在右边,无论是1还是3-4。图像不应像狗一样伸展,或者像第二排或第三排中的那些那样间隔

1 个答案:

答案 0 :(得分:0)

在这种情况下不要使用堆栈视图。您需要简单的自动布局约束来排列右侧的三个按钮。

enter image description here