我有一个基于 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 是否有一些我没有发现可以覆盖的方法?或者是其他东西?