我一直在爲這個問題奮鬥了3天,仍然無法弄清楚。我希望這裏的任何人都能幫助我。當使用AutoLayout隱藏單元格內的UIView時,UITableViewCell高度不適合
目前,我有一個UITableView自定義單元格(UITableViewCell的子類)就可以了。在這個自定義的單元格中,有許多UILabel,並且它們都被正確設置爲自動佈局(指向單元格內容視圖)。通過這樣做,無論UILabel是長文本還是短文本,單元格高度都可以顯示適當的高度。
的問題是,當我嘗試設置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()
如在圖2中顯示,的UILabel 6可以是具有長的文本,當我隱藏該視圖中,內容視圖仍然表現出與隱藏前一樣大的規模。 請指出我在哪裏我錯了,我將不勝感激。
你可以顯示描述約束的IB截圖嗎?這可能會提供更好的圖片。 – Shripada
嘗試將tableView.rowHeight = UITableViewAutomaticDimension 更改爲索引路徑上的行,並重新加載tableView中的willSelect方法。如果它不工作,則嘗試將主視圖添加到覆蓋整個單元格的單元格中,然後添加所需的標籤。將主視圖固定到單元格的四邊以調整單元格的大小。希望它會有所幫助! – dip
@Shripada,由於聲望,我只能通過imgur放2張照片,請看看。 thxs – user3431933