2015-02-07 143 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

相關問題