![](/img/trans.png)
[英]change width and height of UIImageView dynamically inside tableViewCell
[英]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.