UITextView保持文本位置旋转

时间:2015-10-14 11:48:04

标签: ios objective-c uitextview screen-rotation

我的应用有一个UITextView,带有一段很长的,不可编辑的,可滚动的文字。当用户旋转设备时,我注意到移动中的位置。因此,例如,假设设备处于纵向模式,并且左上角的单词是“Stackoverflow”,在旋转到横向之后,不再是左上角的单词,文本被一个或有时更多的行关闭。如果我旋转回肖像,它会转移得更多。每次只是一点点。

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

编辑:我认为以下内容可行,但我不确定如何编写第一部分代码:

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

2 个答案:

答案 0 :(得分:0)

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

我建议看看这个帖子: How do I force a UITextView to scroll to the top every time I change the text?

答案 1 :(得分:0)

我会尝试类似下面的内容,并使用点和粒度来获得您可以使用的结果。问题是当textview调整大小时,单词将换行不同(即,左上角的大多数字形可以放置在视图的中心,左侧有新的字形)。

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

          }];
}