我有一个UITextView子类,其高度约束优先级为500.它插入的视图中的所有其他约束都有1000个优先级,因此当不能满足约束时,这个约束将被删除。
我希望能够验证它是否被删除,以便在这种情况下启用滚动。
我试着用这种方式验证:
- (void)updateConstraints
{
CGSize size = [self sizeThatFits:CGSizeMake(self.bounds.size.width, FLT_MAX)];
if (!heightConstraint) {
heightConstraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:1.0f constant:size.height];
heightConstraint.priority=500;
[self addConstraint:heightConstraint];
}
else heightConstraint.constant=size.height;
[super updateConstraints];
if (self.bounds.size.height!=heightConstraint.constant) {
self.scrollEnabled=YES;
}
}
谢谢。
答案 0 :(得分:1)
这是我考虑布局调用/回调顺序的方式:
[self.view layoutIfNeeded]
< - 立即计算/应用约束[self.view setNeedsUpdateConstraints]
< - 自下而上,测量/计算;调用updateConstraints
[self.view setNeedsLayout]
< - 自上而下,应用约束解决方案[self.view setNeedsDisplay]
< - 自上而下,渲染到屏幕听起来您想在视图上实现- (void)updateConstraints
,并在那里添加日志记录和调试。务必致电[super updateConstraints]
,否则您将度过难关。当该方法退出时,已经计算了约束。