UiTableview не обновляет sizetofit в iOS 10, но работает в iOS 11

Я создаю динамический TableView и устанавливаю ячейку с высотой строки 44 в раскадровке. Таким образом, высота таблицы будет зависеть от количества строк, которые моя база данных возвращает в соответствии с результатами. В то же время я подключаю нижнее ограничение tableView к представлению с помощью IBOutlet. Таким образом, высота табличного представления не будет перекрывать клавиатуру и сохранять некоторое расстояние с некоторой конфигурацией. Мой вопрос: как я могу обновить tableView.frame.size.height с помощью sizeToFits() в iOS 10 и ниже?

Вот несколько журналов с более четким изображением, размером tableView и contentView для iOS 10.

Другое изображение, когда sizetofit() табличного представления никогда не увеличивается от меньшего к большему. Другие журналы полностью исчезнут, если моя база данных вернет 0 результатов, а затем для contentSize будет 0,0, а затем, когда я попытаюсь удалить некоторые тексты, contentSize вернется к 44, потому что получил 1 результат из базы данных, и по праву SizeToFit() будет соответствовать размеру на основе contentSize. Но в этом случае он по-прежнему остается с 0.0 и никогда не обновляется.

Изображение для iOS 11, размер tableView и contentView для iOS 11, высота табличного представления с 632 правильно, потому что я установил некоторую автоматическую раскладку, чтобы предотвратить вмешательство в клавиатуру, чтобы пользователь мог прокручивать вниз в tableView.

Некоторые коды для лучшего понимания,

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

    // configuration for tableViewCell.

    tableView.sizeToFit() // WORKs for iOS 11 but doesn't update for iOS10 

    if UIDevice.current.userInterfaceIdiom == .pad {
        tableView.setNeedsLayout()
        tableView.layoutIfNeeded()
        cell.backgroundColor = UIColor.darkGray
    }

    return cell
}

person Drew    schedule 25.10.2017    source источник


Ответы (1)


Я не уверен, чего вы хотите достичь. Предполагая, что вы хотите, чтобы размер вашего tableView совпадал с его содержимым, вы должны фактически манипулировать ограничением высоты вашего UITableView.

Вам нужно установить высоту после обновления источника данных tableView. Если вы используете sizeToFit(), вы также должны сделать это после обновления источника данных tableView.

// using sizeToFit
func loadData(){
    allData  = loadFromDatabase()
    tableView.reloadData()
    tableView.sizeToFit()
}

Если вы решите рассчитать и установить ограничение вручную, вы можете попробовать

func resizeTableView(){
    allData  = loadFromDatabase()
    tableView.reloadData()
    let tableFrame = tableView.frame
    tableFrame.size.height = tableView.contentSize.height
    tableView.frame = tableFrame
}

Я лично установлю рамку вручную или установлю ограничение вместо sizeToFit из-за некоторых ошибок, о которых сообщалось при использовании sizeToFit.

person usergio2    schedule 25.10.2017