Swift:动态更改TableViewCell高度并动态更改WebView高度

时间:2016-08-23 12:07:25

标签: ios swift uitableview uiwebview

我在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的限制,高度有限。那么,如何实现我的需求呢?

3 个答案:

答案 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

如果您在故事板中正确定义了所有约束(或以编程方式),则不应该出现任何错误。

参考:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html