2014-02-21 51 views
1

我一直在StackOverflow很多不同的問題,但我只是無法弄清楚這裏有什麼問題。 我有一個視圖控制器,從JSON接收數據,創建一個數組,然後,它建立一個具有固定高度的UITableView。 問題是我無法滾動到底部。它只是反彈回來。UITableView滾動返回頂部

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *cellIdentifier = @"SettingsCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 

    [cell.detailTextLabel setNumberOfLines:2]; 

    NSDictionary* place = [_placesData objectAtIndex:indexPath.row]; 
    [cell.textLabel setText:[place valueForKey:@"nome"]]; 
    [cell.detailTextLabel setText:[place valueForKey:@"endereco"]]; 
    [cell.detailTextLabel setLineBreakMode:NSLineBreakByWordWrapping]; 
    [cell.detailTextLabel sizeToFit]; 
    UIImage* originalImage = [UIImage imageNamed:@"encontre.png"]; 
    UIImage* resized = [UIImage imageWithCGImage:[originalImage CGImage]scale:(originalImage.scale * 1.8) orientation:(originalImage.imageOrientation)]; 
    cell.imageView.image=resized; 
    cell.textLabel.font = [UIFont fontWithName:@"GillSans" size:17]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
    cell.detailTextLabel.font = [UIFont fontWithName:@"GillSans-Light" size:17]; 

    self.tableView.scrollEnabled=YES; 
    self.tableView.bounces=YES; 
    [self.tableView setAlwaysBounceVertical:YES]; 
    return cell; 
} 

我不知道該怎麼辦。已嘗試手動設置contentSize.height,強制bouncesscrollEnabled幾乎將視圖控制器上的一段代碼翻轉過來。

問候。

+0

那些最後三行之前'return'(設置滾動和彈跳行爲的那些)不屬於這種方法。最好把它們放在你的'UITableViewController'子類的'init'方法中,因爲這些屬性只需要設置一次。 – bdesham

+0

假設您正在使用界面生成器來處理主佈局?所有這些自動調整屬性都設置正確嗎?除了@ bdesham的評論(這仍然不會導致您所看到的問題),此方法中的任何內容都不會顯得太糟糕。 – jterry

+0

當然看起來像那個tableview框架正在可見的視圖下方。 (比你看到的要大得多)你可以啓用側滾動條嗎?當你滾動(拉起來)時,你會看到側滾動條移動到可見的tableview框架之外 - 這意味着框架太大了。你有任何scrollViewDidScroll委託方法?另一種選擇是填充tableview,比如100條記錄。然後看看它是否允許滾動並且不反彈。 –

回答

0

只是設法解決它,如果有人是有這個同樣的問題。

我做了什麼,尺寸檢查我的UITableView裏面,我手動設置「行高度」在70(確切大小我使用)。

在此之後,一切都成爲魅力。但是,如果任何人都可以對這裏真正發生的事情給出全面的解釋,那將非常棒。

+0

哇。反對票。我很想知道爲什麼。 –

1

可以在您的視圖控制器的XIB檢查,在右鍵菜單中選擇您的tableView並單擊「大小inspecto」,你在「iOS的6/7增量」變化: 你可以帶-20高度

我認爲這個問題是在適應與ios7和6

+0

在這裏沒有像這樣的選項...我在我的Size Inspector上得到的所有東西都是表視圖大小,滾動視圖大小,視圖和約束(實際上是空的) –

+0

因此,這並沒有解決我的問題,但它確實有幫助。謝謝! –

2

UITableView的工作方式是需要知道每一行的高度才能計算其大小。

默認行爲是假設每行高度爲44px。這顯然不是你的情況,因爲你說它是70px。這就是爲什麼你必須改變它,以便能夠一路向下滾動

例如假設你有10行。使用默認行高時,您的表格視圖只能向下滾動到10 * 44 = 440px,從而獲得了彈跳效果。 通過設置行高70像素,您的tableview現在下降到10 * 70 = 700像素

1

我有同樣的問題。

我的解決方案是在重新加載表的數據之前更新contentSize。

tableViewOffre.contentSize = CGSizeMake(tableViewOffre.frame.size.width, [app.offres count] * 105); 

其中105是我的排高。

我認爲這不是解決問題(很骯髒的方式我猜)的最佳方式,但發現它的唯一的解決辦法。

1

嘗試實施UITableViewDelegate方法tableView: heightForRowAtIndexPath:,不要讓它自動分配(即sizeToFit)。 UITableView如果您不是非常具體,並且您沒有重寫某些方法,則可能會非常不可預測。
我調用[tableView reloadData]後,我有一個獨特的問題,tableView自動回滾到頂部;這個問題是獨一無二的,因爲它只發生在iPad mini和iOS 8上,其他設備和操作系統都正常工作。希望它可以幫助別人......

0

我遇到同樣的issue.In我的情況,我將一個實現代碼如下,以自定義視圖控制器,它通過推SEGUE呈現。如果tableview中顯示的數據量超過某個數字,那麼我無法觸摸tableview底部的單元格。

已經嘗試了很多方法:設置表格視圖的框架/內容大小,沒有一個適用於我。最後,我找到了根本原因並以簡單的方式解決了它(儘管不夠優雅)。

首先,根本原因:由IB創建的表視圖的寬度大於其父視圖控制器的寬度。因此,任何不在視圖範圍內的單元格都不會被觸摸。

所以,解決方案很簡單:轉到StoryBoard,調整表視圖的寬度,使其小於父視圖的寬度。看起來如果一個表視圖是由StoryBoard創建的,則無法更改它這是我迄今爲止發現的。我想這是一個StoryBoard的錯誤。

幫助它對其他人有用。

1

其實你的問題是關係到表格的框架。通過設置「行高」正在爲你工作,因爲在你的桌子和行高的行的機會計數提供適合你的桌子高度。但它不是這樣做的正確方法。 某處你需要檢查表的高度可能類似於

塊引用 (nameArray.count < 10 kSACellHeight * nameArray.count:kSACellHeight * 11))