更改NSLayoutConstraint的常量时,tableview内容不会更新

时间:2015-07-14 10:40:41

标签: ios uitableview uiscrollview keyboard

我在tableView上添加了一个底部约束,当键盘出现时,我以编程方式更改约束的常量。 tableview的框架调整大小,但是contentSize没有更新,为什么?我怎么能强迫它重新计算。

我尝试了很多方法。

NSNotificationCenter.defaultCenter().addObserverForName(UIKeyboardDidShowNotification, object: nil, queue:NSOperationQueue.mainQueue(), usingBlock: {(notification: NSNotification?) -> () in

    let keyboardSize = (notification!.userInfo![UIKeyboardFrameBeginUserInfoKey] as? NSValue)!.CGRectValue().size
    self.bottomConstraint.constant = keyboardSize.height
    self.view.layoutIfNeeded()

    if let messageTableViewController2 = messageTableViewController, let messageViewSize2 = messageViewSize {

        /*var frame = messageTableViewController2.tableView.frame
        frame.size.height = messageViewSize2.height - keyboardSize.height - 44
        messageTableViewController2.tableView.frame = frame*/

        /*messageTableViewController2.tableView.beginUpdates()
        messageTableViewController2.tableView.layoutIfNeeded()
        messageTableViewController2.tableView.endUpdates()

        var frame = messageTableViewController2.tableView.frame
        frame.size.height = messageTableViewController2.tableView.frame.size.height
        messageTableViewController2.tableView.frame = frame*/

        /*let h = messageTableViewController2.tableView.contentSize.height - keyboardSize.height + 44
        println("messageTableViewController2.tableView.contentSize: \(messageTableViewController2.tableView.contentSize) h: \(h)")
        messageTableViewController2.tableView.contentSize = CGSizeMake(messageTableViewController2.tableView.contentSize.width, h)*/
        /*messageTableViewController2.tableView.setNeedsUpdateConstraints()
        messageTableViewController2.tableView.beginUpdates()
        messageTableViewController2.tableView.endUpdates()*/
    }
})

1 个答案:

答案 0 :(得分:0)

tableView.contentSize不会改变。

因为您更新了tableView的bottomConstraint。只会更改tableView.frame。但是contentSize属性将是相同的。

当tableView中的单元格发生更改时,

tableView.contentSize将会更新。例如,插入,删除,重新加载。