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

Posted

技术标签:

【中文标题】更改视图转换会更改 iOS 7 上的视图位置,但不会在 ios8 上更改视图位置【英文标题】:Changing view transform changes views positions on iOS 7 but not on ios8 【发布时间】:2014-10-27 13:47:25 【问题描述】:

我有一个容器视图控制器。它将另一个控制器添加为子视图控制器,并将其视图添加到视图层次结构中。

所以现在我有:

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 上应该是什么样子并且实际上可以工作:

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

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

【问题讨论】:

好吧,AutoLayout 不适用于 CGAffineTransform。看看这个***.com/questions/12943107/… @BartekChlebek Bartek 你能回答一下吗 【参考方案1】:

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

【讨论】:

它有效但效果不佳。确实使用层变换更好。我向您推荐此链接,而不是建议的链接。 apeth.com/iOSBook/ch14.html#_autolayout_and_view_transforms.

以上是关于更改视图转换会更改 iOS 7 上的视图位置,但不会在 ios8 上更改视图位置的主要内容,如果未能解决你的问题,请参考以下文章

ios - 单元格表格视图内的视图位置仅在滚动后才会更改

UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图

为啥 React Router 更改 URL 但不更改视图

在 iOS 7 中更新导航栏而不更改视图

通过单击列表视图上的列表项更改 MapView Android Studio 上的位置相机视图

更改导航控制器 ios 的转换