2014-09-26 75 views
7

我想调整一个UIView,我的代码在iOS 7.1中完美工作,但是当我在iOS 8中运行它时,它无法正常工作(我会在下面解释)。UIView动画试图改变框架大小不适用于iOS 8但iOS 7

我有我的UIView INT用,我想调整到iPad上全屏值(0,67,511,320)故事板,所以我加了如下代码:

 [UIView animateWithDuration:0.5 animations:^{ 

      CGRect frame = containerView.frame; 
      frame.origin.x = 0; 
      frame.origin.y = 67; 
      frame.size.height = 643; 
      frame.size.width = 1024; 
      containerView.frame = frame; 
      ... 

     }completion:^(BOOL finished) { 
      ... 
     }]; 

我想是这样的:

_________________________________ 
|   |      | 
|   |      | 
|  A  |      | 
|___________|      | 
|         | 
|    BACKGROUND  | 
|         | 
|         | 
|_________________________________| 

       | 
       V 
_________________________________ 
|         | 
|         | 
|         | 
|    A     | 
|         | 
|         | 
|         | 
|         | 
|_________________________________| 

但它开始像(0,67,0,0)的动画(0,67,511,320)

正在发生的事情的任何线索?或者选择?

+0

注意,覆盖所有成员的时候,你做你不需要从'containerView.frame'得到帧。 – Aaganrmu 2014-09-26 09:24:06

+0

是的,我知道,谢谢你的建议。 – 2014-09-26 09:52:49

回答

17

你应该禁用预先生成的约束条件之后。最简单的方法是在动画视图中使用自动调整遮罩而不是约束。

containerView.translatesAutoresizingMaskIntoConstraints = YES; 

你可以把这个代码添加到您-viewDidLoad方法或略高于[UIView animateWithDuration:...

+0

什么应该是contrainerView如果我有滚动视图和uiview里面的scrollview和动画发生在这个uiview里面。这是uiview吗? – coolcool1994 2015-07-06 20:16:53

4

是否启用了自动布局功能? 也许在iOS 8的一些附加约束期间构建时

尝试调用animatin块[self.view layoutIfNeeded];增加,动画代码本身

UPDATE

__block CGRect frame = containerView.frame; 
frame.origin.x = 0; 
frame.origin.y = 67; 
frame.size.height = 643; 
frame.size.width = 1024; 

[UIView animateWithDuration:0.5 animations:^{ 

     containerView.frame = frame; 
     ... 

    }completion:^(BOOL finished) { 
     ... 
    }]; 
+0

我在故事板中加入了我的观点,我该如何禁用它? – 2014-09-26 08:48:50

+0

[self.view layoutIfNeeded]有帮助吗?也看看如何动画视图与constrints http://stackoverflow.com/questions/17626802/animating-uiview-frame-with-constraints – Roma 2014-09-26 08:56:36

+0

不,动画没有显示,如果我使用它:/ – 2014-09-26 08:58:21

相关问题