iOS_不断学习

tableviewCell中嵌套webView高度问题

2016-12-20  本文已影响84人  iOS_Gato_老猫

在viewController.h中定义两个属性:

@interface ViewController : UIViewController
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, assign) CGFloat cellHeight;
@end

在viewController.m中的实现:

#pragma mark tableView delegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 10;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 9) {
WebCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WebCell"];
cell.vc = self;
cell.indexPath = indexPath;
[cell setValueWithUrl:@"http://www.baidu.com"];
return cell;
}
static NSString *cell_iden = @"UITableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cell_iden];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cell_iden];
}
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 9) {
return _cellHeight;
}else{
return 44;
}
}

关键来了,
在cell中首先你要把webView的上下左右约束全设置成0;
在cell.h中:

#import@class ViewController;
@interface WebCell : UITableViewCell
@property (nonatomic, strong) ViewController *vc;
@property (nonatomic, strong) NSIndexPath *indexPath;
-(void)setValueWithUrl:(NSString *)url;
@end

定于这两个属性主要是刷新tableview用。
在cell.m中的实现:

-(void)setValueWithUrl:(NSString *)url{
if (!url || [url isEqualToString:_url]) {//防止死循环
return;
}
_url = url;
NSURL *URL = [NSURL URLWithString:url];
[_webView loadRequest:[NSURLRequest requestWithURL:URL]];
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{
CGSize size = [webView sizeThatFits:CGSizeZero];
CGFloat height = size.height;
_vc.cellHeight = height;
[_vc.tableView reloadRowsAtIndexPaths:@[_indexPath] withRowAnimation:UITableViewRowAnimationNone];
_webView.scrollView.scrollEnabled = NO;//如果需要webview本身的滚动可以不设置成NO
}
上一篇下一篇

猜你喜欢

热点阅读