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跟随内容高度自适应变化的主要内容,如果未能解决你的问题,请参考以下文章

在tableview的headerView中添加webView,webView自适应高度

cell 高度自适应

css 左侧高度 跟随右侧内容高度 自适应

iOS野路子精准获取webView内容高度,自适应高度

iOS UITableview的cell自适应

如何让qml TableView行高动态适应内容