在阅读 Apple 的 View Programming Guide 时,很明显他们没有针对约束对其进行更新。所以有几个问题:
这里的许多帖子都谈到在初始化新 UIView 或将其设置为 CGRectZero 或其他等效项时不使用 -initWithFrame。那你会怎么处理呢?:
-(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self){ //Set up rounded rectangle ivar CGRect frame = [self bounds]; CGFloat radius = frame.size.height / 2; _rectPath = [UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:radius]; } }
然后将绘图代码放入drawRect:中。我发现没有框架就无法正确初始化。(显然,我正在初始化这个 UIView 并立即设置约束但没有立即设置框架)。此代码集的 frame = (0,0,0,0) 因为尚未计算约束。
如果我们不把这段代码放在init中,我们会把它放在哪里?另外,我认为在 init 的视图中初始化我们需要的所有东西是一种很好的做法。
所以这导致了问题......
何时在运行时周期中调用 -updateConstraints 以及视图何时使用这些约束计算其边界?我注意到在-layoutSubviews 之后视图真的不知道它的边界是什么。如果 UIView 仅设置了约束,那么在此之前是否还有其他地方知道它的边界?
很抱歉所有问题,但它们似乎都有关联。谢谢你的样子。