UITextview文本在iOS7中旋转后不显示顶行

UITextview文本在iOS7中旋转后不显示顶行,ios7,uitextview,autolayout,ios7.1,Ios7,Uitextview,Autolayout,Ios7.1,我有一个应用程序,它包含一个显示静态文本的UITextview。我使用UITextview来获得文本的滚动,这比UILabel中显示的文本要长得多。出于某种原因,iOS 7下的UITextview中的文本在旋转后不会一直滚动到顶部。当在iOS 6下运行时,这项功能可以正常工作 这可以通过创建一个带有UITextview的项目来显示,UITextview以故事板为中心,边距约为50。然后添加将UITextview固定到主视图边缘的约束。确保文本字段包含足够的文本以导致滚动: 现在运行应用程序,文

我有一个应用程序,它包含一个显示静态文本的UITextview。我使用UITextview来获得文本的滚动,这比UILabel中显示的文本要长得多。出于某种原因,iOS 7下的UITextview中的文本在旋转后不会一直滚动到顶部。当在iOS 6下运行时,这项功能可以正常工作

这可以通过创建一个带有UITextview的项目来显示,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];
似乎什么都不管用。有人知道如何保持文本的位置吗?

试试这个:

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

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

我也遇到了同样的问题。从故事板上使用UITextView似乎会创建很多令人讨厌的小bug(如)。通过以编程方式创建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];
}

我已经在iOS 8上试过了

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    self.textView.contentInset = UIEdgeInsetsMake(0,0,0,0);
}

从代理视图控制器的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];
}

与上述部分类似:

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()
}

这只是我的问题,还是这个问题有点安静?很抱歉,我想这可能是一个非常烦人的bug,或者我错过了一些简单的东西。如有任何见解,将不胜感激。