/ objc

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;
    }];
}

いまいちモチベーションが上がらないので、本当に値の変更が遅れたのか調べてない。