当帧更新时,UITextView跳转到屏幕底部,键盘后面

时间:2016-04-09 02:35:05

标签: ios keyboard uitextview

我正在实现一个UITextView textInput,它具有与iOS消息窗口类似的效果,其中textview根据文本内容进行扩展/缩小。

当我在textViewDidChange函数中更新UITextView框架时,UITextView跳转到屏幕底部,并隐藏在键盘后面。它不会出现在指定的框架中。

这是我的代码。

 func textViewDidChange(textView: UITextView)
{
    print ("textview did changed")

    let fixedWidth : CGFloat = textView.frame.size.width
    let newSize : CGSize = textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT)))
    var newFrame : CGRect = textView.frame
    newFrame.size = CGSizeMake(CGFloat(fmaxf((Float)(newSize.width), (Float)(fixedWidth))),newSize.height)
    textView.frame = newFrame       
}

另外,这里有keyboardWillAppear()和keyboardWillDisapppear()函数,它工作正常

func keyboardWillAppear(notification: NSNotification){

    print ("keyboard will appear")

    let userInfo:NSDictionary = notification.userInfo!
    let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size

    let contentInsets:UIEdgeInsets = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0)

    self.tableView.contentInset = contentInsets
    self.tableView.scrollIndicatorInsets = contentInsets
    scrollToBottomOfTheTable()

    var messageFrame:CGRect = self.textInput.frame
    messageFrame.origin.y -= keyboardSize.height
    self.textInput.frame = messageFrame
}

func keyboardWillDisappear(notification: NSNotification) {

    print ("keyboard will disappear")

    let userInfo:NSDictionary = notification.userInfo!
    let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(0.25)
    self.tableView.contentInset = UIEdgeInsetsZero
    UIView.commitAnimations()

    self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero

    var messageFrame:CGRect = self.textInput.frame
    messageFrame.origin.y += keyboardSize.height
    self.textInput.frame = messageFrame
}

请帮忙!感谢。

0 个答案:

没有答案