I am working on a lazy loader and I'm into an issue where my UITextView
thinks it's at the bottom of the view immediately after I load more data, consequently incorrectly setting my offsets.
I'm just trying to load the new data, and have the UITextView
scroll down slightly so the user is aware more data has been loaded.
CODE:
-(void)scrollViewDidScroll: (UIScrollView*)scrollView
{
float scrollViewHeight = scrollView.frame.size.height;
float scrollContentSizeHeight = scrollView.contentSize.height;
float yOffset = scrollView.contentOffset.y;
NSLog(@"yOffset + scrollViewHeight = %f",yOffset + scrollViewHeight);
NSLog(@"yOffset = %f",yOffset );
if (yOffset == 0) {
// then we are at the top
}
else if (yOffset + scrollViewHeight == scrollContentSizeHeight) {
if (self.updateInProgress) {
NSLog(@"updateInProgress");
return;
}
// then we are at the end
self.updateInProgress = TRUE;
NSLog(@"scrollContentSizeHeight = %f",scrollView.contentSize.height);
NSLog(@" === at bottom of scrollview ===");
// JUST NEED TO FIX WHERE SCROLLVIEW APPEARS!
self.TextView.text = [NSString stringWithFormat:@"%@\n\n%@",self.TextView.text, self.nextChapterString];
CGPoint offset = self.TextView.contentOffset;
offset.y = yOffset + scrollViewHeight + 100;
[self.TextView setContentOffset:offset animated:NO];
//NSLog(@"updated TextView = %@", self.TextView.text);
// since disabled scrolling while updating, force scroll down a bit
// CGPoint offset = scrollView.contentOffset;
// offset.y += 100;
// [scrollView setContentOffset:offset animated:YES];
}
self.updateInProgress = FALSE;
}
OUTPUT:
This is the output I see, where as you can see, my yOffset changes drastically after more data is loaded...
2014-05-07 23:11:40.370 Test[6314:60b] yOffset + scrollViewHeight = 1821.500000
2014-05-07 23:11:40.370 Test[6314:60b] yOffset = 1432.500000
2014-05-07 23:11:40.371 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.403 Test[6314:60b] yOffset + scrollViewHeight = 1821.000000
2014-05-07 23:11:40.403 Test[6314:60b] yOffset = 1432.000000
2014-05-07 23:11:40.404 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.470 Test[6314:60b] yOffset + scrollViewHeight = 1820.500000
2014-05-07 23:11:40.471 Test[6314:60b] yOffset = 1431.500000
2014-05-07 23:11:40.471 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.504 Test[6314:60b] yOffset + scrollViewHeight = 1820.000000
2014-05-07 23:11:40.505 Test[6314:60b] yOffset = 1431.000000
2014-05-07 23:11:40.505 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.506 Test[6314:60b] scrollContentSizeHeight = 1820.000000
2014-05-07 23:11:40.506 Test[6314:60b] === at bottom of scrollview ===
2014-05-07 23:11:40.508 Test[6314:60b] yOffset + scrollViewHeight = 2309.000000
2014-05-07 23:11:40.508 Test[6314:60b] yOffset = 1920.000000
2014-05-07 23:11:40.508 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.509 Test[6314:60b] yOffset + scrollViewHeight = 1954.000000
2014-05-07 23:11:40.509 Test[6314:60b] yOffset = 1565.000000
2014-05-07 23:11:40.510 Test[6314:60b] yOffset = 389.000000
2014-05-07 23:11:40.510 Test[6314:60b] scrollContentSizeHeight = 1954.000000
2014-05-07 23:11:40.510 Test[6314:60b] === at bottom of scrollview ===
2014-05-07 23:11:40.512 Test[6314:60b] yOffset + scrollViewHeight = 2443.000000
2014-05-07 23:11:40.512 Test[6314:60b] yOffset = 2054.000000
2014-05-07 23:11:40.513 Test[6314:60b] yOffset = 389.000000
Any suggestions as to what I'm doing wrong?
try this
text.text = [NSString stringWithFormat:@"%@\n\n%@",text.text, str];
CGPoint offset = text.contentOffset;
offset.y = yOffset + scrollViewHeight + 100;
text.delegate = nil;//set your delegate nil
[text setContentOffset:offset animated:NO];
text.delegate = self;//set back
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.