在视图出现之前将最后一个滚动位置设置为UITextView

时间:2015-06-09 01:44:48

标签: ios objective-c uiscrollview autolayout uitextview

现在,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值。即使我强制它使用layoutIfNeededviewDidAppear进行布局。

我知道我在viewDidLayoutSubviews或{{1}}得到了正确的结果,但是用户可以看到它动画到最后一个滚动位置。

在视图出现之前是否无法设置子视图的滚动位置?

提前致谢。

0 个答案:

没有答案