簡體   English   中英

Swift:動態更改TableViewCell高度並動態更改WebView高度

[英]Swift: Change TableViewCell Height Dynamically and change WebView Height Dynamically

我有一個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的限制,高度受到限制。 那么,如何實現我的需求呢?

你需要在UITableViewDelegate方法tableView(_:heightForRowAt :)中設置單元格的高度

您將在此方法中對每個單元格高度執行所有計算並返回它。 如果要在不需要滾動的情況下在其中顯示UIWebView ,則應返回UIWebView的滾動視圖contentView的高度 - 加上您可能希望在此單元格中顯示的任何其他高度。

按照步驟:

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

你可以在heightForRowAtIndexPath中返回:

tableView.rowHeight = UITableViewAutomaticDimension

您還需要在estimatedRowHeight中設置一個值,例如

tableView.estimatedRowHeight = 85.0

如果您在故事板中正確定義了所有約束(或以編程方式),則不應出現任何錯誤。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM