【发布时间】:2013-02-03 22:05:37
【问题描述】:
在阅读 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 仅设置了约束,那么在此之前是否还有其他地方知道它的边界?
很抱歉所有问题,但它们似乎都有关联。感谢您的关注。
【问题讨论】:
标签: ios uiview constraints autolayout