UIView не обновляется после изменения константы NSLayoutConstraint

Я хочу изменить высоту UITableView в зависимости от взаимодействия пользователя с кнопкой. Когда пользователь нажимает кнопку, UITableView расширяется, и при нажатии на ту же кнопку высота UITableView уменьшается только для отображения 1-й строки. Ниже мой код

    tblFaults?.setNeedsUpdateConstraints()
    self.view.setNeedsUpdateConstraints()

    if (currentNumber == 1)
    {
        currentNumber = 2
        var newFrame = tblFaults?.frame
        newFrame?.size.height += 67;//tried to change frame as well
        tblFaults?.frame = newFrame!
        faultViewHeight?.constant = 115 
        //faultView height is  tableview height constraint
    }
    else
    {
        currentNumber = 1
        var newFrame = tblFaults?.frame
        newFrame?.size.height -= 67;
        tblFaults?.frame = newFrame!
         faultViewHeight?.constant = 48
    }
    tblFaults?.reloadData()
    //self.view.setNeedsLayout()
    //self.view.setNeedsDisplay()

Я попробовал setNeedsDisplay, setNeedsLayout, а также layoutSubviews () после кода. Но представление не обновляется сразу после нажатия кнопки, а обновляется только после следующего взаимодействия с пользователем (например, изменение прокрутки и т. Д.)


person pz26    schedule 18.05.2018    source источник
comment
Вы не должны изменять фрейм, вам нужно изменить ограничение; покажи этот код   -  person Paulw11    schedule 18.05.2018
comment
Не путайте автоматический макет и рамки.   -  person Mahendra    schedule 18.05.2018
comment
На самом деле я добавил код смены кадра, так как не работал только код константной константы. Я удалил его снова в соответствии с вашим предложением и оставил только этот код   -  person pz26    schedule 18.05.2018
comment
currentNumber = 2 // var newFrame = tblFaults? .frame //newFrame?.size.height + = 67; //tblFaults?.frame = newFrame! faultViewHeight? .constant = 115 Все еще не работает :(   -  person pz26    schedule 18.05.2018


Ответы (2)


Попробуй это :

  faultViewHeight?.constant = 48
  tblFaults.layoutIfNeeded() // you need to call this method
person KKRocks    schedule 18.05.2018
comment
добавлен tblFaults.layoutIfNeeded (), но по-прежнему не обновляется - person pz26; 18.05.2018
comment
попробуйте self.view.layoutIfNeeded () - person KKRocks; 18.05.2018

Спасибо всем. Фактически было достаточно только изменения значения константы ограничения и tableview.reloadData (). БОЛЬШАЯ ошибка, которую я сделал, заключалась в том, что я проверял исполнение на симуляторе. Я попробовал это на устройстве, и он работал отлично. На симуляторе я столкнулся с проблемой даже после попытки self.view.layoutIfNeeded (). Я до сих пор не знаю, почему это происходит на симуляторе, а не на устройстве. Но в конечном итоге приложение должно запускаться на устройстве и работать там. :) Спасибо вам всем.

person pz26    schedule 18.05.2018