2012-07-17 53 views
6

我想在iPhone上創建一個類似Apple的Messages應用程序的UI。我有一個表格視圖和它下面的文本字段。當我選擇文本字段時,當鍵盤向上滑動時,我將表視圖的contentInset設置爲動畫,以便內容顯示在鍵盤上方。更改UITableView的contentInset而不更改其contentOffset?

我有一些代碼使用平移手勢識別器來檢測用戶何時向下滾動表格視圖並在發生這種情況時將鍵盤向下移動(如果您看到Apple的Messages應用程序,它具有相同的功能來關閉鍵盤。在桌面視圖中向下滾動,當你的手指滑過文本框時,鍵盤隨着它下滑)。

這很好,但如果表視圖滾動到頂部,並且隨着鍵盤滑落,我開始更改其內容嵌入,表視圖滾動通過頂部,然後捕捉回頂部,導致奇怪的生澀的動畫。我認爲這是因爲如果表視圖滾動過頂部,那麼更改contentInset會將contentOffset重置爲表視圖的頂部,這使得它變得很奇怪。

有誰知道如何更改滾動視圖的contentInset而不更改其contentOffset?

回答

7

我設法讓一切工作得很好,只需一個小的解決方法。我只是做了這一點:

// in a method that gets repeatedly called as the pan gesture recognizer changes 
if([tableView contentOffset].y > 0) { 
    UIEdgeInsets insets = [tableView contentInsets]; 
    inset.bottom = currentKeyboardHeight; 
    [tableView setContentInset:inset]; 
} 

因此,如果contentOffset是在頂部或滾動經過上的插圖不會改變。如果表格向下滾動一下並拖動,它將更改插入直到它到達頂部,然後停止更改它們,以便不會發生奇怪的閃爍。


編輯:想通了的根本原因我想我會更新這個,而不是見好就收解決方法。我在做的是在我的幀計算中混合一個CGAffineTransformMakeTranslation,根據Apple文檔,這是一個很大的禁忌。當transform屬性不是CGAffineTransformIdentity時,frame變得未定義,並且如果我滾動表視圖並同時更改其內容插入,這會導致一些非常奇怪的行爲。

相關問題