gpt4 book ai didi

swift - Swift 将内容移到键盘后面不起作用

转载 作者:行者123 更新时间:2023-11-30 13:39:18 25 4
gpt4 key购买 nike

在 View Controller 中,我有 UIImageView 和多个 uitextfields。我使用以下基于 Apple 文档的代码,在调用键盘通知时向上移动 ScrollView ,以向上推隐藏的文本字段。然而,当键盘出现时, View 会向上移动。我在这里遗漏了什么吗?

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)
}

最佳答案

尝试此代码并根据您的情况设置“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()
}

关于swift - Swift 将内容移到键盘后面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com