2010-07-09 82 views
0

我不得不把的UITableView初始滾動位置設定爲比第一個(例如,第二部分的第一行)以外的行。奇怪的行爲:

在我的視圖控制器的viewDidLoad中我寫:

- (void)viewDidLoad 
{ 
    // self.view is a container view, not UITableView 
    [super viewDidLoad]; 
    [table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] 
     atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

當屏幕上的負荷,滾動位置立即設置。否則,當動畫參數設置爲YES時,立即設置該位置而不使用任何動畫。 發生了什麼事?

什麼是正確的方式來設置UITableView的初始行位置?

回答

0

最好的地方應該是ViewDidAppear。此外,你應該調用cellWillDisplay中的滾動方法來確保。記得在調用滾動方法之前檢查indexPath

0

只是在黑暗中拍攝,但你有沒有試圖把這個代碼放到viewDidAppear {}?

+0

完全一樣的結果。 – alexey 2010-07-09 20:47:25

0

因爲表很可能還沒有被那麼填充這不會在viewDidLoadviewWillAppear工作(至少它是不是在我的情況)

嘗試把它在一個NSTimer一次,而不是你的表然後加載並調用它。另外,我很快將這個代碼(帶有動畫)放入一個導航欄按鈕項中,並且在表完成加載後它工作得非常好。

+0

即使在viewDidLoad中,滾動也可以工作,但它不會立即滾動。 NSTimer對我來說是一種破解。是否有任何回調的表確實加載事件? – alexey 2010-07-09 20:58:09

+0

正確,它將不會滾動,直到數據存在滾動到。在有大量tableview數據或圖像的項目中,它可能需要2秒或更長時間,然後'viewDidLoad'已被調用。不幸的是,當表加載完成時,「UITableViewDelegate」方法中沒有任何內容。您可能會在這裏找到更多信息:http://stackoverflow.com/questions/1483581/get-notified-when-uitableview-has-finished-asking-for-data – iwasrobbed 2010-07-09 21:10:39