ios - 如何在tableView swift的Xib Cell中创建内部视图动态
问题描述
我已经为 tableView 创建了自定义 Cell Xib,并且它可以动态正常工作。如果我设置numberofRowsInSection
返回 2 个计数,它将在 tableView 中显示两个单元格。实际上我想实现列表应该附加在相同的单元格类型的树视图中。附上屏幕截图。
视图控制器:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, URLSessionDelegate {
@IBOutlet weak var tableView: UITableView!
let urlList = [
["The Swift Programming Language", "https://swift.org/documentation/"],
["Crossdomain.xml", "https://crossdomain.xml"]]
var downloadTaskList: [DownloadTaskInfo]?
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
let nib = UINib.init(nibName: "DownloadEntryViewCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "DownloadEntryViewCell")
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 140
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return urlList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "DownloadEntryViewCell", for: indexPath) as! DownloadEntryViewCell
cell.footerLbl1.text = urlList[indexPath.row][0]
cell.footerPrg1.progress = 0.0
return cell
}
}
Xib代码:
class DownloadEntryViewCell: UITableViewCell {
@IBOutlet weak var rightView: UIView!
@IBOutlet weak var leftView: UIView!
@IBOutlet weak var fileNameLabel: UILabel!
@IBOutlet weak var downloadURLLabel: UILabel!
@IBOutlet weak var progressLabel: UILabel!
@IBOutlet weak var individualProgress: UIProgressView!
@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var footerView: UIView!
@IBOutlet weak var h1View: UIView!
@IBOutlet weak var v1View: UIView!
@IBOutlet weak var footerLbl1: UILabel!
@IBOutlet weak var footerProgressLabel: UILabel!
@IBOutlet weak var footerPrg1: UIProgressView!
@IBOutlet weak var PinView1: UIView!
override func awakeFromNib() {
super.awakeFromNib()
}
}
解决方案
在您的 xib 单元格中添加垂直 stackView。现在在另一个 .xib 文件中为您的页脚列表创建自定义 UiView。
在 tableviewcellForRowAt
方法中做如下
var stackHeight:CGFloat = 0.0
for i in 1...ChildView.count
{
let child_view = Bundle.main.loadNibNamed("ChildView", owner: self, options: nil)?.first as! ChildView
child_view.lblProgress.text = "Swift_programimg"
cell.stackviewOption.addArrangedSubview(child_view)
stackHeight = stackHeight + 60.0
}
cell.stackviewOption.heightAnchor.constraint(equalToConstant: stackHeight).isActive = true
这ChildView
是footerview .xib,stackviewOption
是垂直stackview。for 循环你想要多少个。
这里的行cell.stackviewOption.heightAnchor.constraint(equalToConstant: stackHeight).isActive = true for set stackview height.
用于stackHeight = stackHeight + 33.0
在stackview的总高度中添加每次childview高度。
对应该工作的单元格执行相同的逻辑。
推荐阅读
- algorithm - 如何在 O(nlogn) 时间内找到两组的所有和(算术和比较)
- c# - 我们如何在 c#.Net 控制台创建新字符?
- flutter - Listview 构建器区域上的“NoSuchMethodError:getter 'length' 被调用为 null”
- python-3.x - 收到错误为“AttributeError:'NoneType'对象没有属性'to_csv'”
- firefox - MOZILLA_PKIX_ERROR_MITM_DETECTED?
- php - Laravel Voyager 菜单未更新
- java - 如何以美元格式化双精度并按小数对齐?
- python - 有人可以解释为什么这会导致索引超出范围错误吗?
- emacs - 在新安装的 spacemacs 中安装软件包时出错
- python - While 循环不适用于分配给循环外另一个变量的变量