更改视图变换会更改iOS 7上的视图位置,但不会更改ios8上的位置

时间:2014-10-27 13:47:25

标签: ios objective-c ios7 ios8

我有一个容器视图控制器。它添加了另一个控制器作为子视图控制器,以及它查看层次结构的视图。

所以现在我有:

UIView *self.view //main view
UIView *childView //child view controller's view

我还UIImageView *imageView作为childView的孩子。 ImageView的左侧,右侧和顶部的约束固定有一些常量(12点)。

当我点击按钮时,我使用以下代码滑动子视图:

- (void)swipeDown:(UISwipeGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateRecognized && !self.menuOpened) {

        [UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{

            self.childView.transform = CGAffineTransformTranslate(CGAffineTransformIdentity, 0, 120);

        } completion:^(BOOL finished) {

        }];
    }
}  

所以问题 - 在动画开始之前,imageView将其位置向上移动了一些。 这可以通过在动画之前和之后将约束更改为某些任意数量来抵消,但这是一个肮脏的黑客,因为它需要不同设备的不同值。

它应该是什么样子并且实际上适用于ios 8:

enter image description here

iOS 7上的样子(设置标签无关紧要,请注意图像相对于导航栏的位置):

enter image description here

同样,在iOS 8上,转换工作正常,没有移动任何子视图。在iOS 7上,子视图在视图变换发生变化时失去控制。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

好吧,AutoLayout不适用于CGAffineTransform。看看这个How do I adjust the anchor point of a CALayer, when Auto Layout is being used?