UITableView.automaticDimension не работает - PullRequest
0 голосов
/ 02 января 2019

У меня проблема с ячейкой-прототипом (которая заполняется из Firebase), где высота ячейки устанавливается неправильно, несмотря на установленные ограничения.

Я попытался установить следующее:

override func viewDidLoad() {
    super.viewDidLoad()

    TableViewPVV.rowHeight = UITableView.automaticDimension
    TableViewPVV.estimatedRowHeight = 100

}

Это не работает. При использовании UITableView.automaticDimension высота ячейки по умолчанию равна 44.

Однако, если высота ячейки может быть увеличена, если я явно установлю TableViewPVV.rowHeight в значение, подобное 100.

ПРИМЕЧАНИЕ: Мне также необходимо явно определить желаемую ширину метки, или указанное значение rowHeight игнорируется.

ТАКЖЕ ПРИМЕЧАНИЕ: У меня установлены следующие ограничения на метке: конечный пробел до Superview = 2, начальный пробел = 2, нижний пробел> = 2, верхний пробел> = 2.

Некоторые скриншоты выглядят следующим образом:

Nayem: отредактировано, чтобы добавить новое изображение того, как выглядит контент, без установки желаемой ширины и с высотой, установленной на 100.

import UIKit
import Firebase


class PVVViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var PVVList = [PVVModel]()

    @IBOutlet weak var TableViewPVV: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()



        LoadDataFromPVV()

         // TableViewPVV.rowHeight = 100
        TableViewPVV.rowHeight = UITableView.automaticDimension
        TableViewPVV.estimatedRowHeight = 100

    }



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

        return PVVList.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        //creating a cell using the custom class

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! PVVViewControllerTableViewCell


        //the PVV object
        let PVV: PVVModel

        //getting PVV for selected position
        PVV = PVVList[indexPath.row]

        //adding values to labels
        cell.PVVData.text = PVV.BodyText

        //returning cell
        return cell  
    }


     func LoadDataFromPVV() {


        databaseReference = Database.database().reference()


        let refPVV = Database.database().reference(withPath: "PVV").queryOrdered(byChild: "Status").queryEqual(toValue: "Active")

        refPVV.observeSingleEvent(of: .value, with: { (snapshot) in

            //if the reference have some values
            if snapshot.childrenCount > 0 {

                //clearing the list
                self.PVVList.removeAll()


                //iterating through all the values
                for PVV in snapshot.children.allObjects as! [DataSnapshot] {
                    //getting values
                    let PVVObject = PVV.value as? [String: AnyObject]
                    let PVVText  = PVVObject?["BodyText"]


                    //creating PVV object with model and fetched values
                    let PVV = PVVModel(BodyText: PVVText as! String?)

                    //appending it to list
                    self.PVVList.append(PVV)
                 }

                //reloading the tableview
                self.TableViewPVV.reloadData()
            }

        })
    }
}

Я надеюсь, что смогу динамически регулировать высоту моей метки (PVVData), чтобы она соответствовала тексту, полученному из Firebase.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Пожалуйста, добавьте этот метод в ваш класс

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
}

Убедитесь, что атрибут метки такой:

enter image description here

И установите правильноограничение для метки.

0 голосов
/ 02 января 2019

Просто попробуйте следующий метод:

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

enter image description here

установите ограничения, как показано на рисунке ниже ( с минимальной высотой ).

для минимальной высоты вам необходимо ограничение по высоте.

enter image description here

enter image description here

Установить число строк в 0 .

enter image description here

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}
0 голосов
/ 02 января 2019

В большинстве случаев это проблема ограничений .... Пожалуйста, убедитесь, что ваша верхняя метка выровнена по верху с contenview, а ваша самая нижняя метка выровнена с нижним ограничением contentView.

см. Этот пример

enter image description here

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