在swift 3中更改其容器内按钮元素的x位置

时间:2016-10-20 08:59:43

标签: ios uibutton swift3

我的视图控制器底部有一个包含按钮的滚动条。按钮并不总是活动的,它们随着用户将它们添加到他的收藏夹而改变。这意味着我必须以编程方式决定按钮的x位置。

我所做的是创建从故事板中的视图控制器到脚本的所有按钮的出口,我试图像这样访问它们(简化代码):

    var Items = [String : Bool] 
    @IBOutlet weak var item1: UIButton!

...

    if Items[item] == true {

        item1.isEnabled = true
        \\ here comes a line of code where i should position item1's x position but I haven't managed to find the right way
    }

问题是如何以编程方式更改UIButton的x位置,是否有更好的方法来处理问题?我正在使用Xcode 8和swift 3

编辑:

约束方法:

    func activeConstraint(element: UIButton, constant: Int) {

        let widthConstraint100 = NSLayoutConstraint(item: element,
                                                           attribute:NSLayoutAttribute.width,
                                                 relatedBy:NSLayoutRelation.equal,
                                                 toItem:nil,
                                                 attribute:NSLayoutAttribute.notAnAttribute,
                                                 multiplier:1.0,
                                                 constant: 100)

        let widthConstraint0 = NSLayoutConstraint(item: element,
                                                    attribute:NSLayoutAttribute.width,
                                                    relatedBy:NSLayoutRelation.equal,
                                                    toItem:nil,
                                                    attribute:NSLayoutAttribute.notAnAttribute,
                                                    multiplier:1.0,
                                                    constant: 0)

        if constant == 0 {
            element.removeConstraint(widthConstraint100)
            element.addConstraint(widthConstraint0)
        } else {
            element.removeConstraint(widthConstraint0)
            element.addConstraint(widthConstraint100)
        }

        element.updateConstraints()
    }

调用函数的示例:

    if Items[item] == true {

        activeConstraint(element: item, constant: 100)
    } else {  

        activeConstraint(element: item, constant: 0)
    }

编辑2:

虽然我在这里看到很多关于UIStackView(like this one)的问题,但没有一个解决方案适合我。我在屏幕底部有一个水平滚动条,其中许多按钮以编程方式激活或取消激活,其宽度约束设置为0或100.这是我的情况下最终结果(XCode 8.0):

层次结构: image

  1. UIScrollView有一个元素:View(让我们称之为容器视图),它包含滚动条的所有内容。容器视图需要有4个约束 - top,bottom,leading和trailing设置为superView(UIScrollView)。 (最好全部4设置为0)。同时将垂直约束设置为从Container视图水平居中到superView - UIScrollView。

  2. StackView包含所有按钮 - 它需要将所有4个约束(顶部,底部,前导,尾随)设置为superView,即Container View。

  3. 所有按钮都需要将其宽度约束设置为所需的常量。

0 个答案:

没有答案