2015-11-26 50 views
3

我一直在爲這個問題奮鬥了3天,仍然無法弄清楚。我希望這裏的任何人都能幫助我。當使用AutoLayout隱藏單元格內的UIView時,UITableViewCell高度不適合

目前,我有一個UITableView自定義單元格(UITableViewCell的子類)就可以了。在這個自定義的單元格中,有許多UILabel,並且它們都被正確設置爲自動佈局(指向單元格內容視圖)。通過這樣做,無論UILabel是長文本還是短文本,單元格高度都可以顯示適當的高度。

enter image description here

的問題是,當我嘗試設置UILabels中的一個(底部的一個)被隱藏,內容視圖不相應地調整高度和從而細胞。

我有什麼下來就是我從Interface Builder中添加海特約束至底部標籤有以下。

Priority = 250 (Low) 
Constant = 0 
Multiplier = 1 

這使用虛線約束。然後,在Swift文件中,我提出了以下代碼。

override func viewDidLoad() { 
    super.viewDidLoad() 
    //Setup TableView 
    tableView.allowsMultipleSelectionDuringEditing = true 

    //For tableView cell resize with autolayout 
    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 200 

} 
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? { 
let cell = tableView.cellForRowAtIndexPath(indexPath) as! RecordTableViewCell 
cell.lbLine.hidden = !cell.lbLine.hidden 
if cell.lbLine.hidden != true{ 
    //show 
    cell.ConstrainHeightForLine.priority = 250 
}else{ 
    //not show 
    cell.ConstrainHeightForLine.priority = 999 
} 

//tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 
return indexPath 

}

棘手的是,當我打電話tableView.reloadRowAtIndexPaths(),細胞會顯示正確的高度,但與它必須是通過雙擊觸發一個bug(選擇)在同一行而不是一次點擊。

爲此,我也嘗試在willSelectRowAtIndexPath方法中的代碼,但它們都不起作用。

cell.contentView.setNeedsDisplay() 
cell.contentView.layoutIfNeeded() 
cell.contentView.setNeedsUpdateConstraints() 

目前結果如下(用錯誤小區高度): enter image description here

如在圖2中顯示,的UILabel 6可以是具有長的文本,當我隱藏該視圖中,內容視圖仍然表現出與隱藏前一樣大的規模。 請指出我在哪裏我錯了,我將不勝感激。

+0

你可以顯示描述約束的IB截圖嗎?這可能會提供更好的圖片。 – Shripada

+0

嘗試將tableView.rowHeight = UITableViewAutomaticDimension 更改爲索引路徑上的行,並重新加載tableView中的willSelect方法。如果它不工作,則嘗試將主視圖添加到覆蓋整個單元格的單元格中,然後添加所需的標籤。將主視圖固定到單元格的四邊以調整單元格的大小。希望它會有所幫助! – dip

+0

@Shripada,由於聲望,我只能通過imgur放2張照片,請看看。 thxs – user3431933

回答

0

我終於代碼

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 

更改爲以下

tableView.reloadData() 

然後,它完美地工作。 但是,我真的不知道它的確切原因。希望有人仍然可以發表評論。

相關問題