gpt4 book ai didi

ios - 以编程方式添加 subview 后自动调整单元格大小

转载 作者:行者123 更新时间:2023-11-28 07:38:02 27 4
gpt4 key购买 nike

在我的代码中,我将 subview 添加到每个单元格内的 subview 。每个嵌套的 subview 可以有不同的大小。嵌套的 subview 不会导致单元格增加其高度,因此 subview 会被切断。如何让单元格根据嵌套 subview 增加高度?

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

最佳答案

要调整 tableView 的大小,您需要为添加的任何 View 设置约束,我认为最好的方法是通过 Hook 它的顶部、左侧、底部和右侧约束并使用来使用垂直 stackView

cell.stackTags.addArranagedSubview(tagsField)

并给它一个高度限制

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

If the element you add is a UILabel/UIButton that has an intrinsic content size then no need for the height constraint

还有这个

tagsField.frame = cell.tableCellTagsView.bounds

无法正确获取实际边界,因为它还未知,而且框架布局不会调整单元格的大小

加上通过在单元格子类中实现 prepareForReuse 来清除任何内容,或者删除所有以前添加的 subview

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

在这一行之后

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

不需要 :MyCustomCell

关于ios - 以编程方式添加 subview 后自动调整单元格大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910045/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com