2016-05-06 24 views
0

我不能讓我的UITableView來改變顏色與iOS啓動9.編程方式創建的UITableView總是白色iOS9

我在代碼中創建一個UITableView,這是我的自定義視圖的子視圖,並設置我的子視圖init方法中的背景顏色。

myTableView.backgroundColor = UIColor.yellowColor() 

但它保持白色。

我使用了View Debugging> Capture View Hierarchy來確認它是表格視圖本身,而不是表格視圖單元格是白色的。 (但爲了以防萬一,我設置了單元清除)。

我已經看到了很多談論類似問題的舊帖子的(如thisthisthisthis newer one),所以我試圖像

myTableView.backgroundView = nil // or UIView() 

myTableView.backgroundView.backgroundColor = UIColor.clearColor() 

但事情這些也沒有工作。

我發現,如果我做了

myTableView.backgroundColor = UIColor.yellowColor() 

某個原始佈局後(例如,一個按鈕自來水),那麼它會改變背景顏色。

這只是iOS 9.3的一個問題。在我使用iOS 8.1和8.4的測試中,在init期間設置背景色沒有問題。

還有什麼我可以嘗試嗎?

+0

'init'米ethod不是修改UI屬性的好地方。嘗試將其移動到'layoutSubviews'方法 – redent84

+0

在你的代碼中你添加了這個tableView? viewDidLoad有任何機會?如果是這樣,請將代碼移到viewWillAppear,並使用initWithFrame方法,而不是init。 Init來自NSObject,而initWithFrame專門用於UIView對象。 –

+1

嘗試在'awakeFromNib'中設置背景顏色 – Bing

回答

1

init方法不是修改UI屬性的好地方,因爲視圖層次尚未構建。

嘗試使用layoutSubviewsdidMoveToWindowUIView子類:

var customColor = UIColor.yellowColor() 
override func layoutSubviews() { 
    super.layoutSubviews() 
    self.backgroundColor = customColor 
} 

override func didMoveToWindow() { 
    super.didMoveToWindow() 
    self.backgroundColor = customColor 
} 

您還可以使用viewDidLoadawakeFromNib方法UIViewController子類:

override func viewDidLoad() { 
    super.viewDidLoad() 
    customTableView.backgroundColor = UIColor.yellowColor() 
} 

override func awakeFromNib() { 
    super.awakeFromNib() 
    customTableView.backgroundColor = UIColor.yellowColor() 
} 
1

看起來像別人也遇到的錯誤。作爲一種解決方法,我使用UIImageView(使用我想要的顏色)並將其分配給uitableview背景。希望它也適用於你!

tableView.backgroundView = UIImageView(image: UIImage(named: "yellowColorImage")) 
+0

是的,我想這也可以。 – Suragch

+0

高興地幫助! – Harris

0

我不確定這是最好的答案,但它的工作原理。我後來才通過在init方法做這個設置顏色,直到下一次運行循環:

dispatch_async(dispatch_get_main_queue()) { 
    self.myTableView.backgroundColor = UIColor.clearColor() 
} 

不管它是在被設置背景爲白色被設定返現制度。

相關問題