Ios 更改NSLayoutConstraint';s常数

Ios 更改NSLayoutConstraint';s常数,ios,uitableview,uiscrollview,keyboard,Ios,Uitableview,Uiscrollview,Keyboard,我在tableView上添加了一个底部约束,并且在键盘出现时以编程方式更改约束的常量。tableview的框架会调整大小,但contentSize不会更新,为什么?如何强制它重新计算 我尝试过很多方法 NSNotificationCenter.defaultCenter().addObserverForName(UIKeyboardDidShowNotification, object: nil, queue:NSOperationQueue.mainQueue(), usingBlock: {

我在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()*/
    }
})

tableView.contentSize
不会更改

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


tableView.contentSize将在tableView中的单元格更改时更新。例如,插入、删除、重新加载。

如果我没有错,您必须重新加载单元格以更新行高。