2015-05-28 97 views
1

一些背景: 我正在用UITableView構建一個應用程序,該應用程序顯示用戶可以使用UITableViewCell的子類投票的投票列表。 UITableViewCell子類有5個IBOutlet UILabels:一個問題標籤,然後是4個選擇標籤。投票可能有2,3或4個選項,所以我可能不會顯示第3個和/或第4個選擇標籤。每個標籤都將「行數」設置爲0,這樣如果它們太長,他們會將文本包裝起來。UITableViewCell在第一次加載時不能正確呈現

我已成立,以保證細胞佈局約束具有動態的高度,每本教程:http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift

問題標籤上有內容擁抱優先級爲250,而所有的選擇標籤在251 問題標籤內容壓縮阻力優先級爲751,而所有的選擇標籤都在752.

當我第一次加載應用程序時,第一次調查的問題有太多的垂直填充,第一個選擇得到的截斷與省略號。 但是,當我向下滾動然後向後滾動時,它會自行修復:問題標籤擁抱它的內容,第一個選項顯示其所有內容。

這裏有一個GIF我做了顯示問題(集中在頂電池):

scrolling the tableView

這裏的接口生成器(如果它幫助)的截圖:

interface builder screenshot

下面是我用來填充單元格標籤的代碼:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    PollTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kPollCellReuseId]; 
    Poll *poll = [self.polls objectAtIndex: indexPath.row]; 

    cell.questionLabel.text = poll.question; 
    cell.choiceLabel1.text = [(Choice *)[poll.choices objectAtIndex:0] text]; 
    cell.choiceLabel2.text = [(Choice *)[poll.choices objectAtIndex:1] text]; 

    BOOL hasChoice3 = poll.choices.count > 2; 
    cell.choiceLabel3.text = hasChoice3 ? [(Choice *)[poll.choices objectAtIndex:2] text] : @""; 
    cell.choiceLabel3TopConstraint.constant = hasChoice3 ? 8 : 0; 

    BOOL hasChoice4 = poll.choices.count > 3; 
    cell.choiceLabel4.text = hasChoice4 ? [(Choice *)[poll.choices objectAtIndex:3] text] : @""; 
    cell.choiceLabel4TopConstraint.constant = hasChoice4 ? 8 : 0; 

    return cell; 
} 

爲什麼在第一次嘗試時不能正確渲染?

+1

會發生什麼,如果你在上面的代碼中返回單元之前調用'[cell layoutIfNeeded]'? – sikhapol

+0

這似乎解決了它,但現在它正在抱怨表中的第二個單元格的自動佈局:它不喜歡第三個和第四個選擇標籤之間的垂直間距 –

+0

我減少了第三個和第四個選擇標籤之間的垂直間距約束的優先級第四選擇標籤,現在一切似乎都很好。我是否以正確的方式去解決這個問題?這一切似乎有點哈克我想要完成。 –

回答

0

實施

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 

和返回任何如100,不要忘記設置

self.tableView.rowHeight = UITableViewAutomaticDimension 

viewDidLoad

+0

我不認爲這是問題。我已經在ViewController的'viewDidLoad'中爲這個UITableView提供了這個:'self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 180.0;' –

0

按@ sikhapol的評論: 在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

修復該問題返回小區之前做[cell layoutIfNeeded]

相關問題