2009-10-13 19 views
0

編輯:我最初問這個問題關於一般視圖調整大小,但我現在意識到它是更特定於tableViews的東西。如何在沒有修改行/子視圖的情況下動態調整tableView的大小?

假設一個tableView最初有一個框架(0 0,320 460),即它填充了整個iPhone屏幕。爲了調整的tableView的高度和動畫調整大小,我下面的代碼映射到一個按鈕:

[UIView beginAnimations:@"Animation" context:nil]; 
[UIView setAnimationDuration:3]; 

CGRect rect = self.table.bounds; 
rect.size = CGSizeMake(320, 200); 
self.table.bounds = rect; 
self.table.center = CGPointMake(160, 100); 

[UIView commitAnimations]; 

此代碼將動畫表的高度下降,但......任何動畫發生之前,該表將夾關閉所有不適合新邊界的表格單元格。因此,給定一個最初適合10行的tableView,上面的動畫代碼將導致這一系列事件:

  1. tableView立即刪除底部5行。請注意,它僅刪除行 - tableView的背景仍然延伸到底部。
  2. tableView按預期爲表格的其餘部分設置高度變化。

這不是我正在尋找的行爲。而不是立即裁剪底部的5行,tableView應該保持它的行就位,而桌子的底部邊緣只是向上動畫。

基於我所看到的行爲,似乎tableView正在獲取某種消息,在發現其邊界將要更改後立即刷新其行。有人可以對這種行爲作出一些說明,我怎樣才能避免它?

回答

0

您是否嘗試更改動畫塊中的邊界中心。

我不知道這個具體情況,但ISTR不得不做類似的事情。框架,邊界和中心之間的關係有時會令人沮喪。

+0

是的,試過了,它和剛纔改變框架的效果相同(在動畫開始之前,表格將下半部分剪掉)。我有一種感覺,它與scrollView的contentSize有關,但一直沒能弄清楚什麼。 – iPhoneToucher 2009-10-13 16:57:39

1

視圖的bounds屬性定義視圖的內部座標空間。如果您要更改視圖的大小和/或位置,則只應更改視圖的框架。理論上,bounds屬性可以定義一個完全的任意座標空間,從視圖的封閉框架中斷開,UIKit看起來被設計爲支持這種區別。在實踐中,我認爲我從未見過它在UIKit中的工作方式(bounds.size總是與frame.size和bounds相同.origin始終爲{0,0}),但這是區別所在在那裏,重要的是要記住 - 特別是如果這種行爲在未來發生變化。

我不確定簡單地更改代碼來修改框架而不是邊界將解決問題,但我建議從那裏開始。如果這樣不能解決問題,那麼問題可能是tableview會立即刪除那些在新框架中不可見的行,所以如果是這樣的話,唯一的解決方法可能是自己做動畫設置一個簡單的NSTimer驅動程序,隨着時間的推移緩慢地改變幀大小/位置,從而產生你想要的幻覺,儘管tableview的優化或與Core Animation的交互作用。

相關問題