以编程方式添加子视图后自动调整单元格大小

时间:2018-10-20 20:56:11

标签: ios swift uitableview

在我的代码中,我将一个子视图添加到每个单元格内的子视图中。每个嵌套的子视图可以具有各种大小。嵌套的子视图不会导致像元增加其高度,因此该子视图已被切断。如何基于嵌套的子视图使单元格的高度增加?

import WSTagsField
class Search {
    @IBOutlet weak var searchResultsTableView: UITableView!
    override func viewDidLoad()
    {
        super.viewDidLoad()
        searchResultsTableView.rowHeight = UITableView.automaticDimension
        searchResultsTableView.estimatedRowHeight = 100      
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var availableTagsString = ""
    var matchingAvailableTagsWithSearch = [String]()
    let availableTagsArray = documentKeysWithinRadius[indexPath.row]["available_tags"] as! [String]
    for i in 0...availableTagsArray.count - 1
    {
        if searchTags.contains(availableTagsArray[i])
        {
            availableTagsString += "\(availableTagsArray[i]) "
            matchingAvailableTagsWithSearch.append(availableTagsArray[i])
        }
    }
    availableTagsString = availableTagsString.trimmingCharacters(in: .whitespacesAndNewlines)
    let cell : MyCustomCell = self.searchResultsTableView.dequeueReusableCell(withIdentifier: "cell") as! MyCustomCell

    let tagsField = MyFunctions().createTagsField(fontSize: 14.0)

    //add the view only tags
    if (matchingAvailableTagsWithSearch.count > 0)
    {
        for i in 0...matchingAvailableTagsWithSearch.count - 1
        {
            tagsField.addTag(matchingAvailableTagsWithSearch[i])
        }
    }

    tagsField.readOnly = true

    tagsField.frame = cell.tableCellTagsView.bounds

//tableCellTagsView is a UIView in the prototype cell
    cell.tableCellTagsView.addSubview(tagsField)
    return cell
}

}

约束 enter image description here

1 个答案:

答案 0 :(得分:0)

要调整tableView的大小,您需要为添加的任何视图设置约束,我认为最好的方法是通过挂接top,left,bottom和right约束并使用它来使用垂直stackView

cell.stackTags.addArranagedSubview(tagsField)

并设置高度限制

tagsField.heightAnchor.constraint(equalToConstant:50).isActive = true
  

如果您添加的元素是具有固有内容大小的UILabel / UIButton,则不需要高度限制

也是这个

tagsField.frame = cell.tableCellTagsView.bounds

由于尚不清楚,因此无法正确获得实际边界,而且帧布局不会调整单元格的大小

此外,还可以通过在单元格子类中实施prepareForReuse清除所有内容,或者使用以下命令删除所有先前添加的子视图

cell.stackTags.subviews.forEach { $0.removeFromsuperview() }

此行之后

let cell:MyCustomCell = self.searchResultsTableView.dequeueReusableCell(withIdentifier: "cell") as! MyCustomCell

不需要:MyCustomCell