我在TableViewController
内有一个TableViewCell
,我有一个UIWebView
。我希望UIWebView
显示来自互联网的一些内容,但我不想要滚动效果,我希望WebView
具有基于内容长度的动态高度。另外,我希望TableViewCell
能够根据WebView
的动态高度动态调整其单元格高度。这可能吗?
这是我实施TableViewController
的方式:
class DetailTableViewController: UITableViewController {
var passPost: Posts = Posts()
var author: Author = Author()
override func viewDidLoad() {
super.viewDidLoad()
getAuthor()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("detailCell")
let postImageUrlString = passPost.postThumbnailUrlString
let postImageUrl = NSURL(string: postImageUrlString)
let size = CGSize(width: 414.0, height:212.0 )
let filter = AspectScaledToFillSizeFilter(size: size)
(cell?.contentView.viewWithTag(1) as! UIImageView).af_setImageWithURL(postImageUrl!, filter: filter)
//Set Author Avatar
let authorAvatarUrlString = author.authorAvatarUrlString
let authorAvatarUrl = NSURL(string: authorAvatarUrlString)
//Mark - Give Author Avatar a Round Corner
let filter2 = AspectScaledToFillSizeWithRoundedCornersFilter(size: (cell?.contentView.viewWithTag(2) as! UIImageView).frame.size, radius: 20.0)
(cell?.contentView.viewWithTag(2) as! UIImageView).af_setImageWithURL(authorAvatarUrl!, filter: filter2)
//Set Post Title and Content and so on
(cell?.contentView.viewWithTag(4) as! UILabel).text = passPost.postTitle
(cell?.contentView.viewWithTag(6) as! UIWebView).loadHTMLString("\(passPost.postContent)", baseURL: nil)
我所做的heightForCellAtIndexPath
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! tableViewCell
tableView.rowHeight = cell.theWebView.scrollView.contentSize.height
return tableView.rowHeight
}
这是正常的,除了WebView
有滚动效果,由于TableViewCell
的限制,高度有限。那么,如何实现我的需求呢?
答案 0 :(得分:0)
您需要在UITableViewDelegate
方法中设置单元格的高度
tableView(_:heightForRowAt:)
您将在此方法中对每个单独的单元格高度进行所有计算并返回它。如果要在其中显示UIWebView
而不需要滚动,则应返回UIWebView的滚动视图contentView的高度 - 加上您可能希望在此单元格中显示的任何其他高度。
答案 1 :(得分:0)
按照以下步骤操作:
1)从webview到tableviewCell设置前导,尾随,顶部,底部约束0(零)
2)现在不需要调用tableView的HeightForRow方法。
3)在webview委托方法
中 func webViewDidFinishLoad(webView: UIWebView)
{
var frame = cell.webView.frame
frame.size.height = 1
let fittingSize = cell.webView.sizeThatFits(CGSizeZero)
frame.size = fittingSize
}
4)webview scrollenabled = false
答案 2 :(得分:0)
您可以在heightForRowAtIndexPath中返回:
tableView.rowHeight = UITableViewAutomaticDimension
您还需要在estimatedRowHeight中设置一个值,例如
tableView.estimatedRowHeight = 85.0
如果您在故事板中正确定义了所有约束(或以编程方式),则不应该出现任何错误。