Как создать внутреннее представление динамич c в ячейке Xib tableView swift - PullRequest
0 голосов
/ 20 января 2020

Я создал пользовательскую Cell Xib для tableView, и она прекрасно работает динамически. Если я установлю numberofRowsInSection return 2 count, он отобразит две ячейки внутри tableView. На самом деле, я хочу добиться того, чтобы список добавлялся в тот же вид ячеек дерева. скриншот прилагается.

ViewController:

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()

    }

}

Ответы [ 2 ]

1 голос
/ 20 января 2020

в вашей ячейке xib добавить вертикальный stackView. Теперь создайте пользовательский UiView в другом файле .xib для списка нижнего колонтитула.

в табличном представлении cellForRowAt метод, как показано ниже

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 - это нижний колонтитул .xib и stackviewOption вертикальный вид стека для l oop сколько вы хотите fotter.

здесь строка cell.stackviewOption.heightAnchor.constraint(equalToConstant: stackHeight).isActive = true for set stackview height. строка stackHeight = stackHeight + 33.0 для добавления каждый раз высоты childview в общую высоту stackView.

Сделайте те же логи c для ячейки, которая должна работать.

0 голосов
/ 20 января 2020

Установите tableview высоту в heightforrowAt на UITableView.automaticDimension.

Сделайте ваш вид сверху внутри UIView (назовем его view1). Установите его высоту 0 с приоритетом 750, теперь дочерний элемент внутри view1 даст высоту view1. Сделайте вывод нижнего ограничения последнего потомка внутри view1.

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

Теперь для каждого cellforrowatIndexpath вызова метода передайте некоторые параметры, чтобы скрыть или показать вид сверху.

func configureUI(cellData:String? , showTopView:Bool){
    mBtmCnst.isActive = showTopView
}

Обязательно пометьте вид сверху view1 на cliptobounds true и mBtmCnst на strong розетка.

Надеюсь, это поможет вам!

...