我有一个带有Page View
的模式屏幕。Page View
使用情节提要ID加载页面。所有页面都是相同的。每个页面都有一个UITextView
,其中包含一些文本及其可滚动内容。在viewDidLoad
设置文本。当设置文本时,它会自动滚动到底部,所以在viewDidAppear
,我调用[self.textField setContentOffset:CGPointZero animated:animated];
。
除了第一页外,这项工作很好。由于一个错误,在viewDidLayoutSubviews
中,我需要为UITextView
切换scrollEnabled
。然而,当加载第一页时,由于某种原因,viewDidAppear
在viewLayoutSubviews
之前被调用,这具有将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
}
}