1

我有一个基于 UIView 的控件,我需要根据控件的各种标准和属性来调整它的大小。我不确定我这样做的方式是否是最好的方式,但到目前为止,这是我发现的唯一一种似乎有效的方式。因为控件的大小取决于各种属性,所以我无法在构造函数中设置大小。

我有一个名为 setupControl: 的方法,它包含根据属性集完成设置的所有代码。我不希望 setupControl: 手动调用,所以在 drawRect 我检测是否需要调用它,然后将这样的选择器排队:

[self performSelector:@selector(setupControl)withObject:self afterDelay:0];
return;

在 setupControl 的底部:然后我这样做:

[self setNeedsDisplay];
self.hidden = NO;

我还覆盖了 initWithFrame: 和 initWithDecoder: 构造函数,以便它们将 UIView 设置为隐藏,直到执行设置代码。这个想法是在控件调整大小时消除显示器上的任何“闪烁”。

正如我所说,这工作正常,可以绘制控件的大小是 xib 文件,然后在运行时将自己设置为正确的大小。

我的问题是这种排队选择器、退出 drawRect: 然后使用 setNeedsDisplay 的方法是否是唯一的方法?O 是否有一些我没有发现可以覆盖的方法?或者是其他东西?

4

1 回答 1

3

当您更改布局时,您可能想要覆盖的是layoutSubviews而不是 drawRect,而不是实现自定义绘图。

您可能还必须对更改视图大小的任何属性使用自定义设置器并调用[self setNeedsLayout]设置器以确保在计算视图大小之前调用您的 layoutSubviews 方法。

于 2010-09-26T20:38:40.767 回答