NSLayoutConstraint.constantの値を変更してビューのサイズを取得した
フラグでNSLayoutConstraint.constantの値を変更してscrollViewのcontentSizeを変更する、ということをしようとしたけどうまくいかなかった。
CGRectGetMaxY()
の時点では_childView.frame
にはconstraint
の値が反映されてなかった。
だいたいの処理の流れ(適当)
- (void)updateConstraint {
if ([self isHidden]) {
_childViewConstraint.constant = 100.f;
}
else {
_childViewConstraint.constant = 0.f;
}
CGRect frame = _mainView.frame;
frame.size.height = CGRectGetMaxY(_childViewConstraint.frame);
_mainView.frame = frame;
CGSize contentSize = _scrollView.contentSize;
contentSize.height = CGRectGetHeight(_mainView.frame);
_scrollView.contentSize = contentSize;
}
NSLayoutConstraint.constantの値を変更しても即座に値が反映されないのかも?と思ったのでこうした
- (void)updateConstraint {
[UIView animateWithDuration:0.f animations:^{
if ([self isHidden]) {
_childViewConstraint.constant = 100.f;
}
else {
_childViewConstraint.constant = 0.f;
}
} completion:^(BOOL finished) {
CGRect frame = _mainView.frame;
frame.size.height = CGRectGetMaxY(_childViewConstraint.frame);
_mainView.frame = frame;
CGSize contentSize = _scrollView.contentSize;
contentSize.height = CGRectGetHeight(_mainView.frame);
_scrollView.contentSize = contentSize;
}];
}
いまいちモチベーションが上がらないので、本当に値の変更が遅れたのか調べてない。