现在,UITextView
中有BViewController
。当viewWillDis以
AViewController
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
double d = self.textView.contentOffset.y;
self.aViewController.lastOffset = [NSNumber numberWithDouble:d];
NSLog(@"textView contentHeight %f", self.textView.contentSize.height)
}
当用户返回BViewController
时,我将UITextView
设置为上次滚动位置。
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Force layout
[self.view setNeedsLayout];
[self.textView.layoutManager ensureLayoutForTextContainer:self.textView.textContainer];
//[self.view layoutIfNeeded];
double d = [self.aViewController.lastOffset doubleValue];
[self.textView setContentOffset:CGPointMake(0, d) animated:NO];
NSLog(@"textView contentHeight %f", self.textView.contentSize.height);
}
结果是,UITextView
的滚动位置与最后一个滚动位置不同。 NSLog
中的viewWillAppear
值小于viewWillDisappear
中的ensureLayoutForTextContainer
值。即使我强制它使用layoutIfNeeded
或viewDidAppear
进行布局。
我知道我在viewDidLayoutSubviews
或{{1}}得到了正确的结果,但是用户可以看到它动画到最后一个滚动位置。
在视图出现之前是否无法设置子视图的滚动位置?
提前致谢。