我需要在表格视图单元格中显示具有不同样式和颜色的不可编辑文本。在研究中,似乎UIWebView是实现我想要的风格/颜色灵活性的方法。这是我做的:(注意iOS 5,XCode 4)
当我运行时,所有这些“都有效”,除了单元格不会调整大小以适应Web视图中包含的所有文本。事实上,他们根本没有调整大小;它们是故事板中绘制的高度。以下是一些示例代码:
cellForRowAtIndexPath:
UITableViewCell *cell = nil;
WebViewTableViewCell *webCell = (WebViewTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cellid"];
// Now populate the cell with dynamic data
NSDictionary *thisData = [self.dynamicData objectAtIndex:indexPath.row];
NSString *myString= [NSString stringWithFormat:@"%@. %@",
[thisData objectForKey:@"key1"],
[thisData objectForKey:@"key2"]];
[webCell.webView loadHTMLString:myStringbaseURL:nil];
cell = webCell;
return cell;
heightForRowAtIndexPath:
WebViewTableViewCell *webCell = (WebViewTableViewCell *) [self tableView:a_tableView cellForRowAtIndexPath:indexPath];
// Now that we have the cell, let it determine what its height should be.
CGFloat rowHeight = 45; // default unless if a problem accessing the cell
if( webCell )
{
CGSize size = [webCell.webView sizeThatFits:CGSizeZero];
rowHeight = rowHeight < size.height ? size.height : rowHeight;
}
还有一件事 - 细胞虽然不是正确的高度,但是可以滚动。我想让它们固定高度而不能滚动。
有什么想法吗?
- 约翰
答案 0 :(得分:0)
要停用滚动功能,您只需设置tableView.scrollEnabled = NO
即可。要获得正确的高度,您可以将视图控制器设置为webview delegate
,并执行以下操作:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"var height = 0; for (var i=0; i < document.all.length; i++) { document.all[i].height; if (document.all[i].height > height) { height = document.all[i].height; } }"];
CGFloat height = [result floatValue];
}
我对大型JavaScript感到抱歉,但我认为它会起作用。但是,如果您支持6之前的iOS版本,我建议您使用支持UILabel
的内置NSAttributedString
或开源UILabel
子类。
答案 1 :(得分:-4)
Here 是自定义表格视图的更好方法。