Авторазмер ячейки после подпредставления добавлен программно - PullRequest
0 голосов
/ 20 октября 2018

В моем коде я добавляю подпредставление к подпредставлению внутри каждой ячейки.Каждое вложенное подпредставление может быть разных размеров.Вложенное подпредставление не приводит к увеличению высоты ячейки, поэтому подпредставление обрезается.Как можно увеличить высоту ячейки на основе вложенного подпредставления?

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 голосов
/ 21 октября 2018

Чтобы изменить размер табличного представления, вам нужно установить ограничения для любого добавленного представления, я думаю, что лучший способ - использовать вертикальный стек для этого, перехватывая его верхнее, левое, нижнее и правое ограничения и использовать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...