UITextview文本在iOS7中旋转后不显示顶行
我有一个应用程序,它包含一个显示静态文本的UITextview。我使用UITextview来获得文本的滚动,这比UILabel中显示的文本要长得多。出于某种原因,iOS 7下的UITextview中的文本在旋转后不会一直滚动到顶部。当在iOS 6下运行时,这项功能可以正常工作 这可以通过创建一个带有UITextview的项目来显示,UITextview以故事板为中心,边距约为50。然后添加将UITextview固定到主视图边缘的约束。确保文本字段包含足够的文本以导致滚动: 现在运行应用程序,文本将正确定位在UITextview中,第一行显示在顶部。旋转后,文本将下移: 旋转回纵向后,文本仍向下滚动几行 如果您在iOS 6中运行它,所有这些都可以完美运行。我已经做了很多研究,并在viewWillLayoutSubviews中尝试了以下可能的解决方案,以使文本保持原位:UITextview文本在iOS7中旋转后不显示顶行,ios7,uitextview,autolayout,ios7.1,Ios7,Uitextview,Autolayout,Ios7.1,我有一个应用程序,它包含一个显示静态文本的UITextview。我使用UITextview来获得文本的滚动,这比UILabel中显示的文本要长得多。出于某种原因,iOS 7下的UITextview中的文本在旋转后不会一直滚动到顶部。当在iOS 6下运行时,这项功能可以正常工作 这可以通过创建一个带有UITextview的项目来显示,UITextview以故事板为中心,边距约为50。然后添加将UITextview固定到主视图边缘的约束。确保文本字段包含足够的文本以导致滚动: 现在运行应用程序,文
[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,或者我错过了一些简单的东西。如有任何见解,将不胜感激。