2014-12-02 90 views
0

我在UIViewController中有一個UITableView作爲子視圖。當用戶按下tableView下的UITextfield時,當鍵盤出現時,我設置tableView的contentOffset。如果我像1點滾動(向上/向下),表格視圖將它的contentOffset重置爲默認值。我確定我沒有將contentOffset重置爲我的代碼中的任何位置。爲什麼會發生? 下面的是我如何設置ContentOffset:UITableView在滾動時重置ContentOffset

CGRect keyboardEndFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

[_tableView setContentOffset:CGPointMake(0, keyboardEndFrame.size.height) animated:YES]; 
+0

你是否還將UITableView的底部填充設置爲與鍵盤一樣高?要麼是這樣,要麼調整'UITableView'的大小,使它在鍵盤開始的地方結束......如果你不這樣做,表格視圖在技術上會被滾動傳遞到底部,所以用你的手指滾動它將導致它重置滾動位置... – jjv360 2014-12-02 14:13:06

+0

@ jjv360不,我不這樣做。我如何添加底部填充? – HusseinB 2014-12-02 14:17:12

回答

2

要填充添加到一個UITableView這樣,它的內容可以在鍵盤上方滾動,你可以做這樣的事情:

-(void) keyboardMoved:(NSNotification*)notify { 

    // Get values 
    CGRect endFrame; 
    [[[notify userInfo] valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&endFrame]; 
    endFrame = [self.view convertRect:endFrame fromView:nil]; 

    // Add padding 
    int inset = self.view.bounds.size.height - endFrame.origin.y; 
    tableView.contentInset = UIEdgeInsetsMake(0, 0, inset < 0 ? 0 : inset, 0); 
    tableView.scrollIndicatorInsets = tableView.contentInset; 

} 
+0

謝謝,它的工作!我想補充一點,如果在ViewController出現時隱藏了任何tabBar,我們應該在插入中添加44。 – HusseinB 2014-12-02 14:47:38

1

問題是你沒有調整內容大小,基本上是這樣的:

你有uiTableView,其大小爲320 * 400,內容大小相同,顯示鍵盤和設置內容偏移量,但不改變內容大小(I意味着你設置了不可抵消的抵消),th你開始滾動,並且你的表格滾動到它可能的偏移值,在這種情況下你需要增加內容大小。但對於tableView更好的是添加contentInset與計算底部插入。

+0

謝謝! Plus One +1 – HusseinB 2014-12-02 14:48:05