Swift:无法更改imageView框架,imageView在故事板中

时间:2017-05-18 10:08:47

标签: swift frame ios-autolayout

有一个名为scrubberImageView的ImageView,它位于故事板中,我设置了它的高度和宽度高度百分比和centerX。当我在方法viewDidAppear()中设置scrubberImageView的中心时,它失败并显示故事板中设置的帧。但是当我用下面的代码时,框架将被正确设置。

delay(0.1) {
        UIView.animate(withDuration: 0.3, delay: 0.1, options: .curveEaseOut, animations: {
                self.scrubberImageView.center = CGPoint(x: 50, y:self.scrubberImageView.center.y)
            }, completion: nil)
        }

我不知道是否有其他方法可以解决这个方法,我试着使用下面的代码。

self.scrubberImageView.updateConstraints()

你们有一些方法可以解决这个问题吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您正在尝试将自动布局约束与手动框架布局相结合。我强烈反对这一点。

如果要移动图像视图,请不要使用自动布局将其放在首位,然后手动计算并设置所需的大小,或者改为为约束值设置动画。

扩展后者,你拥有的centerX约束,假设它的常量为0,将把图像视图放在超视图的中间。

如果为此约束添加插座,则可以在代码中更改其常量。将此设置为20将向右移动图像视图20pts(因为它将centerX偏移20),并将其设置为-20,您猜对了,将其向左移动20pts。

在代码中的任何约束更改后,您应始终致电self.view.layoutIfNeeded()以应用更改,否则您将看不到它们!

请参阅以下示例,该示例将图像设置为右侧50点的图像:

self.imageViewCenterX.constant = 50
UIView.animate(duration: 5) {
    self.view.layoutIfNeeded()
}

注意我只在动画块中包含对layoutIfNeeded的调用,没有必要在此处包含常量值设置。

动画回到中心只是将值设置为0并按上述方式调用layoutIfNeeded的情况!