[英]Setting background color of UIView subclass doesn't work
我正在嘗試更改我的一個UIView子類的背景顏色。 出於某種原因, self.backgroundColor = [UIColor whiteColor];
當我把它放在我的- (id)initWithFrame:(CGRect)frame
方法中時,它沒有做任何事情。 視圖始終是黑色的。 我也從我的視圖控制器嘗試了self.myView.backgroundColor ...
但是這也沒有用。 關於我做錯了什么的任何想法?
相關代碼如下所示:
[...]
@interface PaperView : UIView
[....]
[...]
@implementation PaperView
[...]
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[...]
// Initialization code
self.backgroundColor = [UIColor whiteColor]; // This doesn't do anything, the view is always black.
}
return self;
}
我有同樣的問題。 我迷上了layoutSubviews()
,它工作正常:
override func layoutSubviews() {
super.layoutSubviews()
self.backgroundColor = UIColor.clearColor()
}
如果要從xib取消歸檔此視圖,則需要覆蓋-initWithCoder:
. -initWithFrame:
僅在以編程方式創建視圖時才會調用。
這表示視圖沒有設置框架。 我建議在initWithFrame:
設置斷點initWithFrame:
驗證它是否被調用。 如果您打電話,比如說, ... = [UIView alloc] init]
,那么這可能是您問題的根源。
編輯
如果實際上正在調用initWithFrame:
那么該視圖可能會被另一個視圖覆蓋,從而使其看起來不起作用(因為您沒有看到它)或者視圖本身是隱藏的。
另一種排除故障的方法是覆蓋backgroundColor屬性並設置斷點。 找出callstack中正在改變顏色的其他內容。
你用什么方法調用self.myView.backgroundColor? 你確定,它是在viewDidLoad之后:? 但是,不知道你的第一種方法有什么問題。 你能展示更多代碼嗎?
您可以使用self.layer.backgroundColor
:
mySubclassedView.layer.backgroundColor = UIColor.green.cgColor
你為什么不能執行self.backgroundColor = [UIColor whiteColor]
在-viewDidLoad
方法,而不是-initWithFrame
? 然后嘗試self.backgroundColor = [UIColor whiteColor];
以及self.myView.backgroundColor
以查看哪些有效。
我剛才遇到了同樣的問題 。 即使我在自定義init方法中設置了正確的幀並將背景顏色設置為白色,以及在我的viewWillAppear
方法中,也沒有顯示背景顏色。 我也證實沒有任何東西覆蓋它。
然后我找到了解決方案 :我在viewDidAppear
設置背景顏色,而且一切都很好:
- (void)viewDidAppear:(BOOL)animated
{
[self.view setBackgroundColor:[UIColor whiteColor]];
self.view.frame = _viewFrame;
}
( _viewFrame
CGRect已傳入我的init方法。)
另一種選擇是將其設置在- (void)viewDidLayoutSubviews
,具體取決於您想要設置背景顏色的時間和方式。
說實話,我還不明白為什么在viewDidAppear
設置背景顏色雖然在init方法中不起作用,但在兩個地方設置它的代碼是相同的。
希望這可以幫助,
埃里克
更新:它確實與視圖的框架有關 。 當我在init方法中設置視圖的框架時,在viewDidAppear中設置背景顏色不再具有所需的效果。 這是即使我把我的視圖的框架,創建子視圖我認為構建方法之后的情況。 所以真正的謎團是:在我創建視圖的位置和顯示它的位置之間, 視圖生命周期中的哪些內容會導致視圖的幀重置為不正確的內容?
所以,答案實際上是:只要您的框架設置正確並且您的視圖可見,它就會起作用。 只需在整個視圖的生命周期中檢查視圖的框架,以確保它是正確的。
整蠱......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.