更改NSLayoutConstraint常量后,UIView不会刷新

时间:2018-05-18 05:56:11

标签: ios swift user-interface 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()。但是按钮单击后视图不会立即刷新,但只有在下次用户交互后才会刷新(例如滚动视图更改等)

2 个答案:

答案 0 :(得分:1)

试试这个:

  faultViewHeight?.constant = 48
  tblFaults.layoutIfNeeded() // you need to call this method

答案 1 :(得分:0)

谢谢大家。 实际上只有约束常量值更改和tableview.reloadData()就足够了。我做的大错是,我正在检查模拟器上的执行。我在设备上尝试了这个,它工作得非常好。在模拟器上,即使在尝试self.view.layoutIfNeeded()之后我也面临着这个问题。我仍然不知道为什么这是模拟器上的行为而不是设备上的行为。但最终应用必须在设备上运行并在那里工作。 :) 谢谢大家。