3

我有一个包含显示静态文本的 UITextview 的应用程序。我使用 UITextview 来滚动文本,这比在 UILabel 中显示的要长得多。出于某种原因,iOS 7 下的 UITextview 中的文本在旋转后不会保持滚动到顶部。这在 iOS 6 下运行时按预期工作。

这可以通过创建一个具有 UITextview 的项目来显示,该项目以故事板为中心,边距约为 50。然后添加将 UITextview 固定到主视图边缘的约束。确保文本字段包含足够的文本以导致滚动:

在此处输入图像描述

现在运行应用程序,文本将正确定位在 UITextview 中,第一行显示在顶部。旋转后,文字会下移:

在此处输入图像描述

旋转回纵向后,文本仍向下滚动几行。

如果您在 iOS 6 中运行它,所有这些都可以完美运行。我已经尝试进行了大量研究,并在 viewWillLayoutSubviews 中尝试了以下可能的解决方案,以使文本保持原位:

[textView sizeToFit];
[textView layoutIfNeeded];

[textView setContentOffset:CGPointMake(0.0, 0.0)];

[textView scrollRectToVisible:CGRectMake(0.0, 0.0, 1.0, 1.0) animated:NO];

似乎没有任何效果。有谁知道如何保持文字的位置?

4

5 回答 5

1

尝试这个:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self.textView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
}

我在 iOS 7.1 上对此进行了测试。

于 2014-03-14T23:48:25.210 回答
1

从委托视图控制器的 viewDidLayoutSubviews 通知方法调用 UITextView 的 scrollRangeToVisible: 消息。这将在旋转后以及第一印象时调整范围。

-(void)viewDidLayoutSubviews {

    [self scrollToTop];
}

-(void) scrollToTop {
    [self.textView setScrollEnabled:NO];
    [self.textView scrollRangeToVisible:NSMakeRange(0.0f, 0.0f)];
    [self.textView setScrollEnabled:YES];
}
于 2015-11-12T18:12:39.883 回答
0

我有同样的问题。看起来使用情节提要中的 UITextView 会产生很多烦人的小错误(像这样)。我设法通过以编程方式创建 UITextView 解决了这个问题:

-(void) viewDidLoad{
    self.textView=[[UITextView alloc] init];
    self.textView.translatesAutoresizingMaskIntoConstraints=NO;
    [self.view addSubview:self.textView];

    NSDictionary* views = @{@"textView": self.textView};
    NSArray* vContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views];
    NSArray* hContrains=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[textView]-50-|" options:NSLayoutFormatAlignAllLeft metrics:nil views:views];
    [self.view addConstraints:vContrains];
    [self.view addConstraints:hContrains];

}
-(void)viewWillLayoutSubviews{
   [self.textView layoutIfNeeded];
   [self.textView sizeToFit];
}
于 2014-04-15T00:26:12.967 回答
0

已经在 iOS 8 上尝试过。

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    self.textView.contentInset = UIEdgeInsetsMake(0,0,0,0);
}
于 2015-05-05T17:52:27.167 回答
0

类似于上面的一些:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
  self.textView.scrollRectToVisible(CGRect(x:0,y:0,width:1,height:1),animated: false)
  self.textView.layoutIfNeeded()
  self.textView.sizeToFit()
}
于 2016-11-03T04:47:35.767 回答