2015-02-07 63 views
1

我正在开发一款应用程序,该应用程序最初为iOS 7制作的工作非常好,但现在移至iOS 8后,事情无法正常工作。基本上,我有一个按钮的看法。当我点击该按钮时,带有UITextField的另一个UIView“从可见屏幕区域下方的位置”滑动“到屏幕上。当我点击UITextField键入内容时出现问题,键盘出现,但UITextField的视图返回到离开屏幕的初始位置。这在iOS 7中没有发生,所以我认为这与iOS 8自动布局的变化有关。有谁知道我可以做些什么来解决这个问题?如果我不需要,我宁愿不关闭自动布局,因为我的应用的很大一部分依赖于它。iOS 8 AutoLayout更改视图的位置

下面是一些代码,告诉你我指的是什么。在我的例子,“locationField”是被窃听的按钮,“locationView”是其滑动到屏幕上的UIView:

- (IBAction) locationFieldTapped:(UIButton *)sender { 
    [self slideViewUp:_locationView]; 
} 

- (void) slideViewUp:(UIView *)slidingView { 
    if (viewIsSlidUp) { 
     return; 
    } 

    CGRect frame = slidingView.frame; 
    int availableHeight = self.view.frame.size.height; 

    // don't move view up if it's already moved up or in the process of moving up 
    if (frame.origin.y < availableHeight) { 
     return; 
    } 

    viewIsSlidUp = YES; 

    // move view just off screen for animation start, in case it's not already there 

    frame.origin.y = availableHeight; 
    slidingView.frame = frame; 

    [UIView animateWithDuration:0.5f animations:^{ 
     CGRect newFrame = frame; 
     newFrame.origin.y = availableHeight - CGRectGetHeight(frame); 
     slidingView.frame = newFrame; 
    }]; 
} 
+0

使用自动布局时,不应设置任何框架。您应该通过修改约束来移动您的视图。 – rdelmar 2015-02-07 07:09:11

回答

3

您需要设置视图的你在iOS 8的动画约束然后自动布局系统处理剩下的事情。你可以创建一个IBOutlet到NSLayoutConstraint并且简单的改变它的常量属性。然后在动画块的已编辑视图的超级视图中调用layoutIfNeeded方法。

+0

完美的工作!谢谢! – user3200744 2015-02-08 17:12:21