检查是否已应用NSLayoutConstraint

时间:2014-04-14 11:22:11

标签: ios uitextview autolayout

我有一个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;
}





}

谢谢。

1 个答案:

答案 0 :(得分:1)

这是我考虑布局调用/回调顺序的方式:

  • [self.view layoutIfNeeded]< - 立即计算/应用约束
  • [self.view setNeedsUpdateConstraints]< - 自下而上,测量/计算;调用updateConstraints
  • [self.view setNeedsLayout]< - 自上而下,应用约束解决方案
  • [self.view setNeedsDisplay]< - 自上而下,渲染到屏幕

听起来您想在视图上实现- (void)updateConstraints,并在那里添加日志记录和调试。务必致电[super updateConstraints],否则您将度过难关。当该方法退出时,已经计算了约束。