设置UIView子类的背景颜色不起作用

And*_*ers 6 objective-c uiview ios

我正在尝试更改我的一个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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ams 7

如果要从xib取消归档此视图,则需要覆盖-initWithCoder:.-initWithFrame:仅在以编程方式创建视图时才会调用.


jos*_*inm 7

我有同样的问题.我迷上了layoutSubviews(),它运作正常:

override func layoutSubviews() {
    super.layoutSubviews()
    self.backgroundColor = UIColor.clearColor()
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*emy 4

这表明视图没有设置框架。我建议在你的程序中设置一个断点initWithFrame:来验证它是否被调用。如果您打电话给,例如,... = [UIView alloc] init]那么这可能是您问题的根源。

编辑

如果initWithFrame:实际上被调用,则该视图可能被另一个视图覆盖,看起来它不起作用(因为您看不到它)或者视图本身被隐藏。

另一种排除故障的方法是覆盖backgroundColor 属性并设置断点。找出调用堆栈中的其他内容正在改变颜色。