Ios 在何处设置UIView子类';子视图?

Ios 在何处设置UIView子类';子视图?,ios,uiview,initialization,uilabel,drawrect,Ios,Uiview,Initialization,Uilabel,Drawrect,我有一个简单的UIView子类,在其中放置UILabel,以便从UIViewController为此类UIView标签提供特定的框架、背景色和文本格式 我正在看报纸,但有些事情我还没有完全理解。。。当您的视图只有系统标准子视图时,例如myUILabel,我是否应该覆盖drawRect:方法?或者,这只适用于核心动画员工?如果我不应该在这种方法中设置标准子视图,那么正确的位置是什么?然后我是否应该重写init方法 提前感谢否,您不应该覆盖drawRect来初始化子视图,因为它会影响性能。这应该在i

我有一个简单的
UIView
子类,在其中放置
UILabel
,以便从
UIViewController
为此类
UIView
标签提供特定的框架、背景色和文本格式

我正在看报纸,但有些事情我还没有完全理解。。。当您的视图只有系统标准子视图时,例如my
UILabel
,我是否应该覆盖
drawRect:
方法?或者,这只适用于
核心动画
员工?如果我不应该在这种方法中设置标准子视图,那么正确的位置是什么?然后我是否应该重写
init
方法


提前感谢

否,您不应该覆盖drawRect来初始化子视图,因为它会影响性能。这应该在init、initWithFrame或initWithCoder方法中完成。例如,这就是如何使用initWithFrame方法实现的

- (id)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  if (self) {
      //initialize sub views 
  }
  return self;

请注意,
UIView
init
实现只是使用
CGRectZero
调用
initWithFrame
。因此,如果使用NSCoding,您应该始终覆盖
initWithFrame
(或
initWithCoder
)。谢谢。我遇到了另一个问题:通过覆盖
layoutSubviews
方法来设置子视图怎么样?这会比在初始化方法中设置它们更合适吗?您应该覆盖
layoutSubviews
,以便为您的子视图执行任何自定义布局逻辑,例如更新它们的框架。由于它可以在
UIView
s生命周期内多次调用,因此不适合初始化子视图本身。这应该在初始化器中完成。@Hamish如果要初始化某些子视图,您需要具有视图的实际框架,该怎么办?