直到drawRect之后才知道UIView的最终帧大小?

时间:2012-04-03 20:41:41

标签: ios core-graphics

我正在使用drawRect在UIView中绘制数据网格,其中我不知道创建UIView时的最终大小,因为列数和行数是动态的。当然我可以在创建UIView之前进行计算,但这确实没有意义,因为我也将在UIView子类中进行这些计算,而不是必须提取它。

那我该如何处理呢?我是否使用非常大的帧初始化并在完成drawRect后进行调整?

我还将此视图设置为UIScrollView的内容,以防它太大而无法在为其分配的区域中查看。

我要绘制的视图看起来像这样:Pricing Grid

2 个答案:

答案 0 :(得分:0)

也许其他人有另一个解决方案,但我认为在你的情况下我会覆盖setFrame:并调用setNeedsDisplay,以便在你的帧更改后调用drawRect。你有没有试过这种方法?

答案 1 :(得分:-1)

  • 在视图中添加一个方法,根据数据确定它应该有多大。这需要与drawRect:分开。
  • 在视图控制器中,当您设置视图时,请调用该方法以获得该大小。
  • 然后将视图的边界和/或框架设置为该大小。
  • 并将滚动视图的contentSize设置为该大小。

关键概念是:分离“确定我的观点有多大”和“画出我的观点”的想法。现在,你在绘制时正在进行大小计算,但是你需要能够更早地完成它。

如果您想获得幻想,可以在视图的超级视图中查看覆盖layoutSubviews - 这将是检查视图所需大小是否已更改的好地方,然后更新视图的大小和滚动视图的contentSize。但是没有必要这样做才能开始。