1.在TableView的numberOfRowsInSection方法中设置contentOffSet- (NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{
if (self.isScrollBottom) { //只在初始化的时候执行
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0005 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if(self.messages.count>0) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([self.messageTable numberOfRowsInSection:0]-1) inSection:0];
[self.messageTable scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
});
}
return self.messages.count;
}
2.这种方法要加一个延时,不然会造成死循环。
在viewDidAppear中将属性改为NO
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:YES];
self.isScrollBottom = NO;
}
3.解决向上拉卡顿 缓存行高
- (CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath{
CGFloat height;
if(self.heightArray.count> indexPath.row) {
// 如果有缓存的高度,取出缓存高度
height = [self.heightArray[indexPath.row]floatValue];
}else{
// 无缓存高度,计算高度,并加入数组
XJMessage*currentMsg =self.messages[indexPath.row];
height = currentMsg.messageHeight;
[self.heightArray addObject:[NSNumber numberWithDouble:height]];
}
returnheight;
}
网友评论