【问题标题】:UIView transitionWithView: clipping my UITextViewUIView transitionWithView:剪辑我的 UITextView
【发布时间】:2010-07-20 21:07:51
【问题描述】:

我有一个禁用滚动的 UITextView,我正在使用页面卷曲转换来更改里面的文本。这是我正在使用的代码:

myView.text = nextString;

[UIView transitionWithView:myView duration:PAGE_CURL_DURATION options:UIViewAnimationOptionTransitionCurlDown animations:nil completion:nil];

一切正常,除非新文本字符串的行数比旧文本字符串多,否则它将被剪裁,直到动画完成。看起来好像 contentSize 在动画之后发生了变化。我尝试添加 myView.contentSize = myView.bounds.size; 但这并没有改变任何东西。我也关闭了“剪辑子视图”,但无济于事。

这是动画之后的样子:

片刻之后,文本不再被剪裁。

任何想法如何防止剪辑?

【问题讨论】:

  • 仍在寻找解决方案...欢迎提出尝试的建议!
  • 找到了解决方案(仅一个半月后)。 UIViewAnimationOptionAllowAnimatedContent 嘘!

标签: iphone uiview uitextview transition


【解决方案1】:

简单的方法是按照 Bjarne 所说的去做 - 使用 clipsToBounds 属性。但请注意 - 这会使文本无限向下扩展。因此,您还需要用一个容器视图包围您的文本字段,该容器视图会裁剪到边界以设置上限。

如果这不起作用,您将不得不做一些工作来手动扩展文本视图的边界并在新文本较大时在动画之前重新定位它。

要获取文本的大小,请查看 UIKit 框架中的 UIStringDrawing.h。具体来说,我正在考虑使用: - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode; 与 UILineBreakModeWordWrap 一起使用。

获取大小的另一种方法可能是 UILabel 中的这个函数: - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines; 并传入最大可能文本视图的边界。

为了获得额外的功劳,您可能还需要考虑为视图边界的变化设置动画以实现更平滑的过渡。

【讨论】:

  • 这似乎会解决它,但它没有。 UIViewAnimationOptionAllowAnimatedContent 做到了。还是不错的建议!感谢您的提示!
【解决方案2】:

这很奇怪。 contentSize 不应剪辑内容,而仅确定滚动行为。然而,这是从动画前到动画后的唯一变化。并且取消选中剪辑子视图总是对我有用。

几个选项:

我假设您的UITextView.frame 足够大,可以包含最初两个文本中最大的一个?如果您在动画开始之前设置它,您可能为时已晚。在这种情况下,像[self performSelector(continueWithStuff:) withObject:object afterDelay:0.01] 这样的技巧会产生奇迹,因为在动画确定初始状态之前,您需要给 UI 时间来实现您的更改。

但到目前为止,最简单的解决方法是为每个文本添加一堆换行符。既然你没有滚动,这应该不是问题。

另一个角度可能是将您的UITextView 嵌入到UIView 中,然后您可以对其进行动画处理。阅读文档,view 参数应该是“包含转换中涉及的视图的 容器视图”。忽略这一事实可能会给您带来令人惊讶的结果。

【讨论】:

  • 备案:UIViewAnimationOptionAllowAnimatedContent 允许 UITextView 在动画时更新,停止剪辑问题。
【解决方案3】:

解决问题的最简单方法是将 UITextView 的属性“clipsToBounds”设置为 NO。这将使您的文本视图可以在其边界之外绘制

【讨论】:

  • 这不是视图裁剪到边界的问题,而是在动画期间没有更新。 UIViewAnimationOptionAllowAnimatedContent 修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-12-23
相关资源
最近更新 更多