【问题标题】:Adding UIView subclass programmatically not drawing itself以编程方式添加 UIView 子类而不是绘制自身
【发布时间】:2012-03-15 05:57:38
【问题描述】:

我不明白这是如何工作的。如果我将 UIView 对象绘制到我的 UIViewController .xib 文件中,那么我的 UIView 会重绘自身。如果我将它添加到子视图中

CustomView : UIView

在 UIViewController 的 viewDidLoad 中

CustomView *v = [[CustomView alloc] initWithFrame:self.view.frame];
[self.view addSubview:v];

CustomView 不会自己绘制。然后我试着做

[self.view setNeedsDisplay];

我仍然一无所获。只是一个白色背景(与我之前得到的黑色背景不同),但没有我的绘图。当您以编程方式添加 UIView 时,它是如何工作的?谢谢。

【问题讨论】:

  • initWithCoder:中有初始化逻辑吗?当从 nib 文件加载视图时,将调用此初始化程序而不是 initWithFrame:
  • @titaniumdecoy 不,我没有任何初始化。我记得读过一些关于它的东西,并看到一些关于它的帖子。我调用 initWithCoder 吗?还是我仍然调用initWithFrame?另外,既然一切都在我的 drawRect: 中完成,我将在 initWithCoder 中初始化什么?
  • 您可能需要分享您的 CustomView 或至少相关部分。
  • 好吧,我想通了,只需要在我的 sharedInit 方法中将背景颜色设置为白色,因为这已经在 IB 中设置了。抱歉这个愚蠢的问题。
  • 你也试过[v setNeedsDisplay] 吗?

标签: iphone uiview uiviewcontroller


【解决方案1】:

您可能只是错误地设置了CustomView 的框架。

每个视图都有自己的坐标空间,左上角为 (0, 0)。视图的frame 位于其父级的 坐标空间中。这意味着将视图的frame 设置为与其父视图的frame 相同通常是错误的。

视图的bounds 位于视图自己的坐标空间中。所以如果你想让你的CustomView完全覆盖它的superview,你应该将CustomViewframe设置为它的superview的bounds

试试这个:

CustomView *v = [[CustomView alloc] initWithFrame:self.view.bounds];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多