iOS tableView跟随内容高度自适应变化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS tableView跟随内容高度自适应变化相关的知识,希望对你有一定的参考价值。
参考技术A 由于开始做的列表是通底并且cell高度不定,因此用tableViewCell自适应开发的列表,后期设计要求优化,若cell数量少,tableView跟随内容高度变化,最长为通底。tableView、collectionView父类为scrollView,所以可以应用 contentSize 属性进行 tableView.frame 更新,避免计算每个cell高度进行累加。
但在reloadData后tableView并不会立即更新其contentSize,因此需要调用 layoutSubviews 或 layoutIfNeeded 进行视图layout即时更新,再通过 contentSize 更新frame。
在tableview的headerView中添加webView,webView自适应高度
最近在项目中需要添加一个webView加载的页面,下面显示的是对这个webView所显示的内容的一个评论列表 ,列表要根据后台加载过来的HTML自适应的变化高度,tableview的cell在webView的下面显示,显示的效果
1.设置webView ,初始的高度设置为0.5 ,设置为tableHeaderView为webView,添加了一个观察者,监控webView 的contentSize的变化
_myWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, 0.5)]; _myWebView.delegate = self; _myWebView.scrollView.scrollEnabled = NO; _myWebView.scrollView.showsHorizontalScrollIndicator = NO; [_myWebView sizeToFit]; _myWebView.scrollView.bounces = NO; [self.myWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil]; _myTableView.tableHeaderView = _myWebView;
2.在observer中的方法,通过获取到整个webView的内容,修改他的frame
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"contentSize"]) { webViewH = [[self.myWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]+15; CGRect newFrame = self.myWebView.frame; newFrame.size.height = webViewH; NSLog(@"现在的高度===%f",webViewH); self.myWebView.frame = newFrame; self.myTableView.tableHeaderView = self.myWebView; } }
3.最后也别忘记释放观察者
-(void)dealloc{ [self.myWebView.scrollView removeObserver:self forKeyPath:@"contentSize"]; }
以上是关于iOS tableView跟随内容高度自适应变化的主要内容,如果未能解决你的问题,请参考以下文章