UITableView загрузить неправильную высоту ячейки Swift - PullRequest
0 голосов
/ 02 апреля 2020

Я делаю с Xcode 10. У меня есть вид таблицы во ViewController.

В ячейке есть метка, которая задается как ведущая, следящая, верхняя и нижняя, строка 0

В ViewDidload () Я добавил

override func viewDidLoad() {
        super.viewDidLoad()
tableview.rowheight = UITableView.automaticDimension
tableview.estimateheight = 98
tableview.reloaddata()
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! CommentCell
        let  idcmt: String
        idcmt = self.CommentIDArray[indexPath.row]
        ref.child("Post_theme/\(userid!)/\(id)/comment/\(idcmt)").observe( .value, with: {(snapshot) in
            let value = snapshot.value as? NSDictionary

            cell.Comment.text = value!["content"] as? String
})

// I have a button in the custom cell but tableview load height wrong even I did not click the button on cell 

self.ref.child("Post_theme/\(self.userid!)/\(self.id)/comment/\(idcmt)/likecomment").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.hasChild(self.userid!){
 cell.Heartcommentaction = {
                    cell.HeartCommentbutton.tintColor = .lightGray
                    self.TableCommentView.reloadData()
                }
}
})
return cell
}


class CommentCell: UITableViewCell{
var Heartcommentaction : (() -> ()) = {}
@IBOutlet weak var Comment: UILabel!
@IBOutlet weak var HeartCommentbutton: UIButton!
@IBAction func HeartCommentaction(_ sender: Any) {
        Heartcommentaction()
    }
}

Но когда я щелкаю Viewcontroller, при просмотре таблицы не загружается правильная ячейка высоты (ячейка, которая необходима для авторизации, отсутствует, ячейка, которая не нужна, изменяет размер)

Затем я добавляю этот код

override func viewDidAppear(_ animated: Bool) {
       tableview.reloadData()
  }

код работает хорошо только для начальных нескольких ячеек, но когда я прокручиваю больше (у меня более 100 ячеек), это снова неправильная высота, когда я прокручиваю до первоначальных ячеек снова ошиблись

Я посмотрел много решений, но у меня не работает

Действительно нужна помощь! спасибо

ОБНОВЛЕНИЕ

это скриншот неправильной высоты ячейки, иногда неправильный, иногда правильный

enter image description here

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Использование:

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 98
}

Также удалить tableview.estimateheight = 98

0 голосов
/ 02 апреля 2020

Дайте этому шанс. Мой код здесь может не скомпилироваться, потому что у меня нет вашего полного исходного кода. Помните, что cellForRow должен синхронно устанавливать все значения в вашей ячейке. И вы не хотите звонить reloadData, потому что вы увидите глюки при прокрутке. Вы хотите позвонить reloadRows. Смотрите ниже и посмотрите, поможет ли это:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! CommentCell
    let  idcmt: String
    idcmt = self.CommentIDArray[indexPath.row]

    cell.Comment.text = "..."
    cell.Heartcommentaction = {}

    ref.child("Post_theme/\(userid!)/\(id)/comment/\(idcmt)")
        .observe( .value, with: {(snapshot) in
            let value = snapshot.value as? NSDictionary

            if let value = value, let indexPath = tableView.indexPath(for: cell) {
                cell.Comment.text = value!["content"] as? String
                tableView.reloadRows(at: [indexPath], .fade)
            } else {
                print("nope")
            }
        })

    self.ref.child("Post_theme/\(self.userid!)/\(self.id)/comment/\(idcmt)/likecomment")
        .observeSingleEvent(of: .value, with: { (snapshot) in
            if snapshot.hasChild(self.userid!){

                if let indexPath = tableView.indexPath(for: cell) {
                    cell.Heartcommentaction = {
                        cell.HeartCommentbutton.tintColor = .lightGray
                        tableView.reloadRows(at: [indexPath], .fade)
                    }
                } else {
                    print("bad indexPath")
                }

            } else {
                print("no child")
            }
        })

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