在我的应用程序中,我在屏幕顶部使用自定义工具栏(只是另一个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
的边距会响应?