2014-01-16 30 views
3

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

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

enter image description here

现在运行的应用程序和文本将被正确地定位在UITextView中,第一行显示在顶部。旋转之后,文本将下移:

enter image description here

旋转回纵向之后,文本还是向下滚动几行。

所有这一切都完美地工作,如果你在的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]; 

似乎没有任何工作。有谁知道如何保持文本的位置?

+0

难道只是我还是这个问题,那种宁静?对不起,但我怀疑这是一个超级恼人的错误,或者我缺少一些简单的东西。任何洞察力将不胜感激。 – Bob

回答

1

试试这个:

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

我测试了在iOS 7.1。

0

我有同样的问题。它看起来像使用故事板中的UITextView创建了很多小的恼人的错误(如this)。我管理通过以编程创建的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]; 
} 
0

已经尝试了本iOS上8.

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

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

-(void)viewDidLayoutSubviews { 

    [self scrollToTop]; 
} 

-(void) scrollToTop { 
    [self.textView setScrollEnabled:NO]; 
    [self.textView scrollRangeToVisible:NSMakeRange(0.0f, 0.0f)]; 
    [self.textView setScrollEnabled:YES]; 
} 
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() 
}