【问题标题】:Moving content behind keyboard doesn't work, Swift在键盘后面移动内容不起作用,Swift
【发布时间】:2016-03-02 16:12:39
【问题描述】:

在视图控制器中,我有 UIImageView 和多个 uitextfields。我正在使用以下代码(基于 Apple 文档)在调用键盘通知时向上移动滚动视图,以向上推送隐藏的文本字段。然而,当键盘出现时,视图确实向上移动。 我在这里遗漏了什么吗?

class NewViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var scrollView: UIScrollView!

var activeTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.contentSize.height = 1000

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

func registerForKeyboardNotifications() {
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: "keyboardWillBeShown:", name: UIKeyboardWillShowNotification, object: nil)
    notificationCenter.addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil)
}

func keyboardWillBeShown(sender: NSNotification) {
    let info: NSDictionary = sender.userInfo!
    let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as! NSValue
    let keyboardSize: CGSize = value.CGRectValue().size
    let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0.0, keyboardSize.height, 0.0)
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets


    var aRect: CGRect = self.view.frame
    aRect.size.height -= keyboardSize.height
    print(aRect)

    let activeTextFieldRect: CGRect? = activeTextField?.frame
    let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin
    if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) {
        scrollView.scrollRectToVisible(activeTextFieldRect!, animated:true)
    }
}


func keyboardWillBeHidden(sender: NSNotification) {
    let contentInsets: UIEdgeInsets = UIEdgeInsetsZero
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets
}

func textFieldDidBeginEditing(textField: UITextField) {
    activeTextField = textField
}

func textFieldDidEndEditing(textField: UITextField) {
    activeTextField = nil
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}


override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.registerForKeyboardNotifications()
}

override func viewDidDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

【问题讨论】:

    标签: swift uiviewcontroller uiscrollview


    【解决方案1】:

    尝试此代码并根据您的情况设置“moveValue”。 记得扩展 UITextFieldDelegate

     func textFieldDidBeginEditing(textField: UITextField)
    {
        self.animateViewMoving(true, moveValue: 85)
    }
    func textFieldDidEndEditing(textField: UITextField)
    {
        self.animateViewMoving(false, moveValue: 85)
    }
    func animateViewMoving (up:Bool, moveValue :CGFloat)
    {
        let durataMovimento:NSTimeInterval = 0.3
        let movimento:CGFloat = ( up ? -moveValue : moveValue)
        UIView.beginAnimations( "animateView", context: nil)
        UIView.setAnimationBeginsFromCurrentState(true)
        UIView.setAnimationDuration(durataMovimento )
        self.view.frame = CGRectOffset(self.view.frame, 0,  movimento)
        UIView.commitAnimations()
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2014-09-06
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      相关资源
      最近更新 更多