更改视图转换会更改 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 上更改视图位置的主要内容,如果未能解决你的问题,请参考以下文章
UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图