动画约束:使用"查看为iPhone"在IB但不是其他iPhone

时间:2017-10-07 16:35:02

标签: swift autolayout

我正在尝试动画约束。它适用于iPhone SE,但不适用于iPhone 7,6,8等。

BIG EDIT:

enter image description here

经过几个小时的尝试修复它,我明白当我进入IB并选择视图作为iPhone 8时,它在iPhone 8上完美运行,当我启动并模拟它时。当我选择iPhone SE时,它在SE上完美运行。 我不明白吗? Interface Builder的预览不应该影响模拟?!

我的观点是这样的:

enter image description here

动画在UIImageView上。 UIImageView和标签之间的约束没有链接: 图像具有X和Y约束以将其对齐在屏幕的中心,以及使用以下代码设置动画的高度和宽度约束:

 func animate() {

    UIView.animate(withDuration: 1.0,
                   delay:0.0,
                   options: .curveEaseIn ,
                   animations:{

                    self.imageHeightConstraint.constant = 240.0
                    self.imageWidthConstraint.constant = 240.0
                    self.imageAlignYAxes.constant = 0

                    self.logoImage.center.x = (self.view.frame.width)/2
                    self.logoImage.center.y = (self.view.frame.height)/2

                    self.view.layoutIfNeeded()


        },
       completion:nil)

    animateTwo()

}

图像从中心移动,直到我添加了此代码:

                        self.imageAlignYAxes.constant = 0

但现在它只是移动的图像下方的标签,但仅限于iPhone 6,6s,7,7 +等,而不是SE上的标签。在SE上,它的工作非常精细,标签没有。移动。

我正在使用SE模型制作故事板,我想这就是为什么它适用于SE,但我不明白为什么动画会移动标签,而它不应该。

提前感谢您的回答!

2 个答案:

答案 0 :(得分:1)

检查您正在制作动画的约束,也许您已启用这些仅限于设备的约束。

通过示例项目,我发现该问题与layoutIfNeeded()有关。由于您只将约束更改为UIImageView,因此应仅在该视图上调用layoutIfNeeded()

答案 1 :(得分:0)

Aks帮助我在私人讨论中解决了这个问题。所有的学分和恭喜都应该来找他!再次感谢您的非常感谢,Aks :)

所以在这里,在UIView.animate中:

self.logoImage.layoutIfNeeded()

而不是

self.view.layoutIfNeeded()

无需将layoutIfNeeded应用于整个视图,只需应用于我们想要设置动画的元素......