2012-04-17 108 views
1

我已經嘗試了滾動視圖的多個實現來處理鍵盤的存在,包括蘋果自己的存在。我無法讓他們工作。只有當顯示鍵盤時才需要UIScrollView

我有一個視圖,當鍵盤不顯示時不需要滾動,但是一旦文本字段是第一響應者,並且鍵盤顯示時,一些內容需要滾動。

請注意,唯一的可編輯文本字段是第一個在屏幕上,所以我不需要滾動視圖來取消隱藏任何東西 - 我只需要屏幕上半部分的滾動功能,但只有當鍵盤是顯示。

這是接近我可以得到:

我可以成功註冊鍵盤的通知。在加載時,我將滾動視圖和內容大小設置爲視圖的整個高度。當鍵盤顯示器,我調整了滾動到原來的高度減去鍵盤高度:

scrollView.frame = CGRectMake(0, 0, 320, 416 - kbSize.height); 

而就躲,我只是重置:

scrollView.frame = CGRectMake(0, 0, 320, 416); 

這幾乎工程。除了顯示鍵盤之後,如果向下滾動到視圖的底部(使鍵盤保持顯示狀態),然後使用返回鍵隱藏鍵盤,當滾動視圖調整大小時,會出現不雅的「跳轉」回到頂部的屏幕。沒有平滑的動畫滾動來調整滾動視圖的大小。

任何想法?與蘋果公司的實施相比,我認爲我做了一個黑客攻擊,但它距離我最近。

+0

嘗試把你的框架調整到一個動畫塊? – 2012-04-17 14:04:14

回答

0

呀像賈斯汀·保爾森的評論,但這裏是代碼

[UIView animateWithDuration:0.3 animations:^{ 
     self.scrollView.frame = newFrame; 
}]; 
+0

這會導致視圖在將動畫恢復到正確大小之前跳轉到底部。 – 2012-04-17 17:01:00

0

我想你可以修復滾動位置之前解僱:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { 

    // like this: 
    self.contentOffset = CGPointMake(0,0); 

    // you can animate the frame change here, or where you were doing it 
    [UIView animateWithDuration:0.2 animations:^{ 
     scrollView.frame = CGRectMake(0, 0, 320, 416); 
    }]; 
    return YES; 
}