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;