UITextView不是从顶部开始的



我有一个带有Page View的模式屏幕。Page View使用情节提要ID加载页面。所有页面都是相同的。每个页面都有一个UITextView,其中包含一些文本及其可滚动内容。在viewDidLoad设置文本。当设置文本时,它会自动滚动到底部,所以在viewDidAppear,我调用[self.textField setContentOffset:CGPointZero animated:animated];

除了第一页外,这项工作很好。由于一个错误,在viewDidLayoutSubviews中,我需要为UITextView切换scrollEnabled。然而,当加载第一页时,由于某种原因,viewDidAppearviewLayoutSubviews之前被调用,这具有将UITextView滚动到底的副作用,可能是由于切换。如果我滚动过第一页,然后返回到第一页,它会按预期工作(那么调用顺序与其他页面相同)。

我尝试过的其他一些东西:

  • viewDidLoad的主队列上设置async_dispatch中的文本
  • viewDidLayoutSubviews呼叫[self.textField scrollRangeToVisible:NSMakeRange(0, 0)];
  • CCD_ 17和CCD_
  • viewDidLoad中设置self.automaticallyAdjustsScrollViewInsets = NO;
  • 设置文本后尝试滚动视图(使用以上任一方法)

有人知道如何解决这个问题吗?

这是视图控制器的代码:

- (void)viewDidLoad {
[super viewDidLoad];
// Get help string
NSMutableAttributedString *attributedString = <fetch text from external source>
// Set text
self.textField.attributedText = attributedString;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.textField setContentOffset:CGPointZero animated:animated];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.textField.scrollEnabled = NO;
self.textField.scrollEnabled = YES;
}

这对我有用。我正在用UITextView加载UIViewController。我在viewDidLoad中分配文本,然后在viewWillAppear中设置contentOffset

class ViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
textView.text = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textView.contentOffset = .zero
}
}

相关内容

最新更新