我已經創建了UITableView
有很多靜態UITableViewCell
s。我已經將這些靜態單元格中的一個樣式更改爲「自定義」。我爲這個單元格創建了一個插座,以便我可以編程方式將子視圖添加到它的contentView
。在viewWillAppear
中,我創建了一個UILabel
並對其進行了適當的配置。然後我測試一些條件,如果它是真的,我創建一個UIView
並添加UILabel
作爲子視圖,然後我將UIView
添加到單元的contentView
。如果不是這樣,我只需將UILabel
本身添加到contentView
。如何重新創建一個UIView的UITableViewCell的contentView
這項功能在單元格第一次出現時效果很好,但是如果我執行push segue然後導航回去,contentView
不會重置,因此它看起來與第一次出現時相同。它應該已經改變,因爲檢查的條件已經改變。我知道這是因爲它只是添加了另一個子視圖。所以我巧妙地在UIView
或UILabel
創建時巧妙地添加了一個tag
,然後在運行代碼以創建適當的視圖之前,我從超級視圖中刪除了該視圖,該視圖爲tag
。我還存儲了對UILabel
(不是UIView
)的引用,所以我將其設置爲nil
。
最終結果是單元格在第一次呈現時顯示得很好,但從push segue返回後,子視圖按預期被刪除,但未添加另一個子視圖,因此單元格完全爲空。我瀏覽了代碼,它全部被調用,所以我不確定爲什麼在第一次刪除它之後沒有任何東西出現。
編輯:這必須是autoresizingMask的問題 - 設置框架手動工作。我怎樣才能確保框架始終填充父框架?
//Store reference to UILabel and bool to test again
var label: UILabel?
var someCondition = false
//viewWillAppear:
cell.contentView.viewWithTag(100)?.removeFromSuperview()
label = nil
//This is the issue - frame is always size 1,1
//label = UILabel(frame: CGRectMake(5, 5, 70, 20))
label = UILabel(frame: CGRectMake(0, 0, 1, 1))
label!.autoresizingMask = .FlexibleWidth | .FlexibleHeight
label!.text = "testing"
label!.backgroundColor = UIColor.whiteColor()
someCondition = !someCondition
if someCondition == true {
var view = UIView()
view.backgroundColor = UIColor.redColor()
//need to replace static frame with autoresizingMask here too
view.frame = CGRectMake(10, 10, 200, 70)
view.tag = 100
view.addSubview(label!)
cell.contentView.addSubview(view)
} else{
label!.tag = 100
cell.contentView.addSubview(label!)
}
謝謝你試試這個!我發現這個問題,這與添加/刪除視圖或標籤無關。問題不在於將幀設置爲固定大小,而是使用自動調整大小蒙版,並且不能正常工作 - 不知道爲什麼。我將用顯示問題的代碼編輯問題。 – Joey 2014-10-12 17:30:09
@Joey,是的,我注意到了這一點,這就是爲什麼我的代碼中沒有這一行。 – rdelmar 2014-10-12 17:31:11
當,我需要這個框架來調整,以始終填充父項。我認爲這會起作用,很奇怪。我將如何實現這一目標? – Joey 2014-10-12 17:36:19