Подтвердить что ты не робот

Просмотр размера ячейки в формате Xcode 9

У меня есть UITableViewController, где ячейка имеет собственный размер правильно, используя Xcode 8 и Swift 3. Теперь, когда я использую Xcode 9 и Swift 4, они не расширяются и просто используют высота по умолчанию - 44.

(у меня есть предложение или два в каждом UITableViewCell)

Я использовал это раньше:

// MARK: - Table view delegate

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

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

... но смог прокомментировать это, потому что за Обновление вашего приложения для iOS 11 сказал, что по умолчанию будет самооценка:

введите описание изображения здесь

Я попытался поиграть с изменением цели развертывания на iOS 11, играя в Storyboard (но я использую базовый стиль Cell View Table, чтобы не было сделано много AutoLayout), и я не могу выяснить, что происходит.

У меня есть заголовок UILabel, равный 0 Lines, и есть Word Word Wrap, но все равно не приближается к тому, чтобы заставить ячейку расширяться на основе текстового содержимого внутри него в Xcode 9. Любые идеи?

Спасибо!

Edit:

Здесь варианты (которых у меня нет) для фиксации, поскольку это ячейка Basic:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

4b9b3361

Ответ 1

У меня была такая же проблема и она была решена с помощью строк кода:

class MyTableViewController: UITableViewController {
  override func viewDidLoad() {
    super.viewDidLoad()

    tableView.estimatedRowHeight = UITableViewAutomaticDimension
    tableView.rowHeight = UITableViewAutomaticDimension
  }

Возможно, это ошибка в Xcode.

Обновление

Новое в Xcode 9 beta 3:

Интерфейс Builder теперь поддерживает настройку оценочногоRowHeight из UITableView. Это позволяет самонастраивать ячейки таблицы, установив оценочную высоту на значение, отличное от нуля, и по умолчанию включено. (17995201)

Ответ 2

У меня была проблема с разбитым столом. Исправление было всего одним щелчком мыши.

Перейдите к сценариям xib или сценарной таблицы с табличными представлениями, перейдите к инспектору размера, и вы увидите высоту табличного представления (даже в динамических табличных представлениях) как 44, а разделы - 22. Просто нажмите "автоматический", и бум, он будет представлен, как ожидалось.

введите описание изображения здесь

Обратите внимание, что я также указываю следующее в viewDidLoad подкласса UITableViewController (layoutSubviews решает проблемы с первой загрузкой tableViewController, которая не правильно позиционируется в отношении непрозрачного navBar).

   self.tableView.estimatedRowHeight = 180;
   self.tableView.rowHeight = UITableViewAutomaticDimension;
   self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  [self.tableView layoutSubviews];

Ответ 3

В дополнение к

tableView.estimatedRowHeight = UITableViewAutomaticDimension
tableView.rowHeight = UITableViewAutomaticDimension

вы должны установить ограничение высоты для contentView tabeleViewCell.

class CustomTableViewCell: UITableViewCell {
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        let height: CGFloat = 200
        heightAnchor.constraint(equalToConstant: height).isActive = true
    }
}

Ответ 4

У меня такая же проблема, и я читал об этом во многих документах, удовлетворяя ответ, было что-то вроде этого. Вам нужно проверить обе опции, чтобы получить правильную высоту, потому что для начальной настройки пользовательского интерфейса, например scrollview, другой такой материал.

Предоставление неотрицательной оценки высоты строк может повысить производительность загрузки табличного представления. Если таблица содержит строки с переменной высотой, может оказаться дорого вычислять все их высоты при загрузке таблицы. Использование оценки позволяет отложить часть стоимости вычисления геометрии от времени загрузки до времени прокрутки. Когда вы создаете ячейку просмотра таблицы размеров, вы должны установить это свойство и использовать ограничения для определения размера ячеек. Значение по умолчанию равно 0, что означает отсутствие оценки. (Apple Documentation) >

см. это изображение для раскадровки

Также обратите внимание, что в xCode 9 есть ошибка, когда вы пытаетесь применить Lazy-загрузку в автоматическом расчете высоты, она будет неожиданно прокручиваться, поэтому я рекомендую вам использовать программный способ в этом отношении.

self.postTableView.estimatedRowHeight = 200;
self.postTableView.rowHeight = UITableViewAutomaticDimension;

что-то вроде этого. Спасибо!

Ответ 5

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var tblview: UITableView!

    var selectindex = -1

    var arrnumber  = ["1","2","3","4","5"]

    var image = ["index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg","rose-blue-flower-rose-blooms-67636.jpeg","index.jpg"]


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


    }


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

        return arrnumber.count
    }

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


        let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as! ExpandableTableViewCell


        cell.lblnumber.text = arrnumber[indexPath.row]

        cell.img.image = UIImage(named: image[indexPath.row] as! String)

        return cell


    }

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

        if (selectindex == indexPath.row)
        {
            return 250
        }
        else{
            return 60
        }

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if(selectindex == indexPath.row)
        {
            selectindex = -1
        }else{
            selectindex = indexPath.row
        }

        self.tblview.beginUpdates()
        self.tblview.endUpdates()

    }

}

Ответ 6

Для меня была проверена Безопасная область. Убрав флажок "Безопасная зона", я сделал для меня работу.