Swift如何以编程方式移动UIButton?

时间:2016-05-31 03:05:58

标签: ios swift uiview uibutton storyboard

我的swift文件中有一个infoButton UIButton插座。此按钮最初放置在故事板中,具有以下约束:

Constraints picture

我希望将此按钮向下移动50个像素,具体取决于NoAds布尔值是真还是假。

我试过这样做,但我似乎无法移动它。

if NoAds{
            print("No Ads")
            infoButton.center.y = infoButton.center.y - 50
        }else{
            print("Ads")
            loadBanner()
        }

我认为这应该是一个简单的解决方法吗?

编辑:该广告是一个标准的Google广告横幅,宽320宽,高50。

4 个答案:

答案 0 :(得分:4)

  1. 有一个顶部约束的出口 enter image description here

  2. 更改(1,'data')

  3. 像这样:

    topConstraint.constant

答案 1 :(得分:2)

使用IBOutlet连接约束,如@ wilson-xj所述。

然后使用以下代码为约束的更改设置动画。这将增加一些润色,并允许广告很好地滑入/滑出而不是通过立即转移他们可能与之交互的内容来刺激用户。

view.layoutIfNeeded()
UIView.animateWithDuration(0.30) { () -> Void in
    self.topConstraint.constant = constraintConstant // 50 or 100 etc
    self.view.layoutIfNeeded()
}

答案 2 :(得分:1)

最好的方法可能是添加约束并动态更改按钮,但如果您不想添加其他插座并想要动态执行此操作,则可以更改按钮框的位置,如下所示:

var X_Position:CGFloat? = startButton.frame.origin.x + 50 //add 50 to move button down page

var Y_Position:CGFloat? = startButton.frame.origin.y

startButton.frame = CGRectMake(X_Position, Y_Position, startButton.frame.width, startButton.frame.height)

这将重新绘制新位置的按钮。

答案 3 :(得分:1)

尝试这个我希望它会有所帮助这是我正在使用的我的代码!! 我假设你们都设置了Top,Bottom,leading,Trailing space等约束

 if NoAds
{
            print("No Ads")
           for item in self.view.constraints
                {
                    if item.firstItem .isKindOfClass(UIButton)
                    {
                        let newField = item.firstItem as! UIButton
                        if newField == buttonName && item.firstAttribute == NSLayoutAttribute.Top
                        {
                            item.constant = -50
                            self.view .layoutIfNeeded()
                        }
                    }
                }
    }else{
            print("Ads")
        for item in self.view.constraints
                {
                    if item.firstItem .isKindOfClass(UIButton)
                    {
                        let newField = item.firstItem as! UIButton
                        if newField == buttonName && item.firstAttribute == NSLayoutAttribute.Top
                        {
                            item.constant = 0
                            self.view .layoutIfNeeded()
                        }
                    }
                }
            loadBanner()
    }