UITextView文本内容不从顶部开始

我有一个很长的文本来自我的JSON文件,但当我点击从我的UITableViewCell链接到我的UIViewController页面,UITextView文本加载string内容,但它不显示内容从一开始,我必须向上滚动时间。

我需要做什么?

我有同样的问题,事实certificate,我必须设置viewDidLayoutSubviews中的内容偏移量才能生效。 我正在使用此代码来显示归因的静态文本。

- (void)viewDidLayoutSubviews { [self.yourTextView setContentOffset:CGPointZero animated:NO]; } 

SWIFT 3:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() self.textView.setContentOffset(CGPoint.zero, animated: false) } 

这是为我工作的唯一方法。 我加载视图之前禁用UITextView的滚动,然后我再次启用它:

  override func viewWillAppear(_ animated: Bool) { yourTextView.isScrollEnabled = false } override func viewDidAppear(_ animated: Bool) { yourTextView.isScrollEnabled = true } 
 [self.textView scrollRangeToVisible:NSMakeRange(0, 1)]; 

viewDidLoad

以编程方式加载内容之前禁用textview的滚动属性textview.scrollenabled = NO;

加载后启用textview的滚动textview.scrollenabled = YES;

以及检查XIB ,总是不检查Textview的滚动启用。

这个问题的答案iOS 10中UITextView顶部的空白空间提供了更清洁的最终用户体验。

在包含文本视图的视图控制器的viewDidLoad中:

  self.automaticallyAdjustsScrollViewInsets = false 

设置textView.setContentOffset(CGPointMake(0,0), animated: false) ,其他一些build议在viewDidLayoutSubviews()调用,但在iPad 2和更老的设备上调用时,实际上会看到滚动的文本屏幕显示。 这不是你想让最终用户看到的东西。

使用这些解决scheme后,我仍然遇到问题。 这个问题肯定与透明导航条有关,并select自动调整视图控制器上的内容插入。 如果您不关心导航栏下方的文本滚动,则最好closures这些设置,并将textview的顶部限制在导航栏的底部,而不是视图控制器的顶部。

如果像我一样,当您向下滚动时,您希望它出现在导航栏下方; 那么为我工作的解决scheme就是添加这个。

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGFloat offset = self.navigationController.navigationBar.frame.size.height+[UIApplication sharedApplication].statusBarFrame.size.height; [self.textView setContentOffset:CGPointMake(0, -offset) animated:NO]; } 

这只是寻找导航栏和状态栏的高度,并相应地调整内容偏移量。

请注意,这种方法的一个缺点是,当设备旋转时,您将最终滚动回顶部。

对我来说很好用这个代码:

  textView.attributedText = newText //or textView.text = ... //this part of code scrolls to top textView.contentOffset.y = -64 //or = 0 if no Navigation Bar textView.scrollEnabled = false textView.layoutIfNeeded() textView.scrollEnabled = true 

滚动到确切的位置,并显示在屏幕顶部我使用此代码:

  var scrollToLocation = 50 //<needed position> textView.contentOffset.y = textView.contentSize.height textView.scrollRangeToVisible(NSRange.init(location: scrollToLocation, length: 1)) 

设置contentOffset.y滚动到文本的末尾,然后scrollRangeToVisible滚动到scrollToLocation的值。 从而,需要的位置出现在scrollView的第一行。

与其他一些答案类似,但是增加的好处是,在后续设备旋转时不会导致滚动到顶部。 在Swift 2.2中运行良好

 /// Whether view has laid out subviews at least once before. var viewDidLayoutSubviewsAtLeastOnce = false override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if !viewDidLayoutSubviewsAtLeastOnce { textView.setContentOffset(CGPoint(x: 0, y: -textView.contentInset.top), animated: false) } viewDidLayoutSubviewsAtLeastOnce = true } 

Swift版本

将需要一个组合的东西:

1.)设置你的sockets

  @IBOutlet var textView: UITextView! 

2.)在视图控制器的故事板closures“调整滚动查看插图”

3.)将内容添加到视图控制器,将内容设置为零

 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() myUITextView.setContentOffset(CGPointZero, animated: false) } 

在Swift 2,Xcode 7的解决scheme中,为了让滚动启用以及文本从顶部开始,这就是你所需要的:

 @IBOutlet weak var myUITextView: UITextView! override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() //start scroll at top of text myUITextView.scrollRangeToVisible(NSMakeRange(0, 0)) } 

Swift 3.0

 override func viewWillAppear(_ animated: Bool) { privacyText.isScrollEnabled = false } override func viewDidAppear(_ animated: Bool) { privacyText.isScrollEnabled = true } 

这是另一种做法,总是为我工作。 Objective-C的:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.textView setContentOffset:CGPointZero animated:NO]; } 

而在Swift中:

 override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) textView.setContentOffset(CGPointZero, animated: false) } 

Swift版本:

 override func viewDidLayoutSubviews() { yourTextView.setContentOffset(CGPointZero, animated: false) } 

步骤来解决

  • 禁用UITextView滚动视图
  • 设置scrollRectToVisible启用
  • UITextView滚动

Swift 3:

 self.yourTextView.isScrollEnabled = false let rect:CGRect = CGRect(x: 0, y: 0, width: 1, height: 1) self.yourTextView.scrollRectToVisible(rect, animated: false) self.yourTextView.isScrollEnabled = true 

这为我工作。

这对我来说是最好的! 我把它放在viewDidLoad()中。

 //TextView Scroll starts from the top myTextView.contentOffset.y = 0 

这是我做到的。 我subclassed textview,和:

 override func willMoveToSuperview(newSuperview: UIView?) { self.scrollEnabled = false } override func layoutSubviews() { super.layoutSubviews() self.scrollEnabled = true } 

从故事板中,select放置文本视图的视图控制器。 在属性检查器中,取消选中“调整滚动视图插入”。 而已。

将以下函数添加到您的视图控制器类…

 Swift 3 override func viewDidLayoutSubviews() { self.mainTextView.setContentOffset(.zero, animated: false) } Swift 2.1 override func viewDidLayoutSubviews() { self.mainTextView.setContentOffset(CGPointZero, animated: false) } Objective C - (void)viewDidLayoutSubviews { [self.mainTextView setContentOffset:CGPointZero animated:NO]; } 

或者你在ViewDidAppear里面加上滚动,这样用户会看到他往上滚动到第一行

在迅速4与归属文本任何答案不帮助我,我结合一些答案的话题。

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) uiTextview.isScrollEnabled = false } override func viewDidAppear(_ animated: Bool) { uiTextview.isScrollEnabled = true uiTextview.setContentOffset(CGPoint.zero, animated: false) } 

而不是设置viewDidLayoutSubviews的内容偏移量,您可以编写viewDidLoad的 layoutIfNeeded来设置textview的正确位置,如下所示:

  self.textView.layoutIfNeeded() self.textView.setContentOffset(CGPoint.zero, animated: false) 

干杯!

将代码添加到viewdidload

 self.automaticallyAdjustsScrollViewInsets = NO;