【问题标题】:UITextView keep text position on rotationUITextView 保持旋转的文本位置
【发布时间】:2015-10-14 11:48:03
【问题描述】:

我的应用程序有一个UITextView,其中包含一段长的、不可编辑的、可滚动的文本。当用户旋转设备时,我注意到位置在移动。因此,例如,假设设备处于纵向模式,左上角的单词是“Stackoverflow”,在旋转到横向后,它不再是左上角的单词,文本会偏离一行或有时多行。如果我旋转回纵向,它会移动得更多。每次就一点点。

有没有办法保持旋转位置,所以用户总是看到同一个词(或至少与该词的行)?

编辑:我认为以下方法可行,但我不确定如何编写第一部分:

  1. 获取第一个可见词的范围
  2. 旋转
  3. 使用scrollRangeToVisible:滚动到保存的范围

【问题讨论】:

  • 你刚才列出的步骤是我想提出的。 AFAICS,您只是无法确定旋转前左上角的单词,对吗?

标签: ios objective-c uitextview screen-rotation


【解决方案1】:

每当发生旋转时,您都可以尝试滚动到顶部。 然而,在 UITextView 顶部滚动并不是那么简单。

我建议查看此线程: How do I force a UITextView to scroll to the top every time I change the text?

【讨论】:

  • 有时文本在中间,所以滚动到顶部会使文本移动得更多。
  • 好的,我明白了。我认为主要问题是 UITextView 改变了它的内容区域。因此文本会有不同的布局。
【解决方案2】:

我会尝试以下类似的方法,并调整点和粒度以获得您可以接受的结果。问题是当文本视图调整大小时,单词会换行(即最左上角的字形可能被放置在视图的中心,左侧有新的字形)。

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    CGPoint topLeft = CGPointMake(1.0,1.0);
    UITextPosition *topPosition = [self.textView closestPositionToPoint:topLeft];
    UITextRange *topRange = [self.textView.tokenizer rangeEnclosingPosition:topPosition withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight];
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
          {
              }
          } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
          {
              [self.textView scrollToRange:topRange];

          }];
}

【讨论】:

  • 我试过了,但是纵向的偏移量会滚动到横向的不同位置。我同意魔法应该发生在viewWillTransitionToSize:
  • 如果你想通过scrollRangeToVisible来做,我会看看closestPositionToPoint和rangeEnclosurePosition:withGranularity:inDirection方法
  • 谢谢 - 我会检查一下。但我没有与scrollRangeToVisible: 结婚,我愿意接受任何解决方案。
  • 我还不能让它工作 - topRange 要么是 nil 要么是文本的第一部分。我会继续努力的。我还对您的代码进行了一些更正。最后,scrollToRange是什么,UITextView没有这种方法。
猜你喜欢
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多