动画对UITextView的textContainerInset中的值进行更改

时间:2016-01-30 23:27:08

标签: ios uiview autolayout uitextview animatewithduration

在我的应用程序中,我在屏幕顶部使用自定义工具栏(只是另一个UIView);它位于UITextView之上。我正在使用自动布局

因为我正在使用这个自定义工具栏 - 我正在执行以下操作,使UITextView在边距和滚动指示符方面看起来正确:

// the height of the custom toolbar is 55
_textView.textContainerInset = UIEdgeInsetsMake(68, 5, 8, 5);
_textView.scrollIndicatorInsets = UIEdgeInsetsMake(54, 0, 0, 0);

当键盘显示时,我删除了工具栏。键盘解除后,我显示工具栏。我为工具栏的位置设置了动画,如下所示:

- (void)animateTopToolbarOn
{
    [self.view removeConstraints:_topToolbarOffScreenVerticalConstraints];
    [self.view addConstraints:_topToolbarOnScreenVerticalConstraints];

    [UIView animateWithDuration:0.6 animations:^{
        [self.view layoutIfNeeded];
    }];

    // this is the bit I need to get right:
    _textView.textContainerInset = UIEdgeInsetsMake(68, 5, 8, 5);
    _textView.scrollIndicatorInsets = UIEdgeInsetsMake(54, 0, 0, 0);
}

- (void)animateTopToolbarOff
{
    [self.view removeConstraints:_topToolbarOnScreenVerticalConstraints];
    [self.view addConstraints:_topToolbarOffScreenVerticalConstraints];

    [UIView animateWithDuration:0.6 animations:^{
        [self.view layoutIfNeeded];
    }];

    // this is the bit I need to get right:
    _textView.textContainerInset = UIEdgeInsetsMake(8, 5, 8, 5);
    _textView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, 0);
}

// For reference:
id topGuide = self.topLayoutGuide;
_topToolbarOffScreenVerticalConstraints = [NSLayoutConstraint
                                               constraintsWithVisualFormat:@"V:[_topToolbar][topGuide]"
                                               options:0
                                               metrics:nil
                                               views:views];

_topToolbarOnScreenVerticalConstraints = [NSLayoutConstraint
                                              constraintsWithVisualFormat:@"V:[topGuide][_topToolbar]"
                                              options:0
                                              metrics:nil
                                              views:views];

工具栏的位置/约束的动画,正如您所期望的那样正常工作。

问题在于更改textContainerInset

的值

注意:我知道我可以将更改放在动画的完成块中。虽然它的外观/感觉有所不同,但问题仍然存在,上边距的变化立即发生,因此它显示为 jump 。这很刺耳。

我可以将UITextView的顶部约束锚定到工具栏的底部约束;然后我不需要更改textContainerInset值或scrollIndicatorInsets。但是,如果我这样做,文本将不会滚动工具栏下面的。如果可能的话,我想避免这种后备立场。

有什么想法吗?

我认为textContainerInset的值不能动画?它与the animatable UIView properties ...

不匹配

如何使用普通UIView作为自定义工具栏来实现此设置,该工具栏在屏幕上和屏幕外设置动画,UITextView的边距会响应?

0 个答案:

没有答案