【问题标题】:drawRect doesn't reflect changes made to layerdrawRect 不反映对图层所做的更改
【发布时间】:2012-09-18 16:21:23
【问题描述】:

我使用的UITableView 有一个自定义UItableViewCell。这个自定义单元格有一个子视图(一个 UIView 子类)。我使用自定义 UIView 子类的drawRect 来放置单元格要显示的所有文本。

drawRectUIView 子类)中,我执行以下操作

/*
// This piece of code is called when setNeedsDisplay is called
*/
- (void)drawRect:(CGRect)rect
{

    self.layer.cornerRadius = 10.0f;
    self.layer.backgroundColor = [[UIColor orangeColor] CGColor];
    self.layer.borderColor = [[UIColor lightGrayColor] CGColor];
    self.layer.borderWidth = 3.0f;
}

但是我的自定义单元格是这样的黑色方块

但如果我选择该行,我确实会看到预期的行为。如下图所示

怎么了?

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch


    【解决方案1】:

    你的drawRect: 方法没有绘制任何东西;您放入其中的代码属于您的 initWithFrame: 实现。

    您应该在初始化程序中操作层配置;在您的drawRect: 中,您应该根据视图的状态调用CGContextRef 的函数。例如,要绘制一些文本,您将使用CGContextShowTextAtPoint,绘制一些线条,您将使用CGContextAddLineToPoint,等等。

    有关drawRect:UIViewCALayer 之间关系的信息,请参阅this question

    【讨论】:

    • 这是否意味着,如果我不在 drawRect 中绘制任何东西,我在 initWithFrame 中所做的初始化不会显示?
    • @GarryO 如果你没有在drawRect:中绘制任何东西,你应该删除该方法;否则,您的矩形将保持黑色。
    【解决方案2】:

    尝试在UIViewdrawRect 被覆盖的那个)初始化期间设置self.layer.masksToBounds = YES 和(也许)self.opaque = NO。 (见this question

    【讨论】:

      【解决方案3】:

      尝试使用禁用单元格的选择突出显示

      [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
      

      【讨论】:

        【解决方案4】:

        你犯了一个错误:

        请到 UItableViewCell 旁边的视图中检查背景颜色,它可能是黑色或其他颜色,重置它以清除颜色,然后检查您的结果,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 2013-08-22
          • 1970-01-01
          • 2022-09-11
          相关资源
          最近更新 更多