gpt4 book ai didi

ios - 当键盘出现时移动 View 并将其呈现在 ScrollView 中。 swift 3

转载 作者:行者123 更新时间:2023-11-29 00:37:38 25 4
gpt4 key购买 nike

SO 上有几个类似的问题,但未解决以下问题。

我正在开发一个简单的登录 View ,其中只有 2 个用于电子邮件和密码的文本字段。最好的用户体验是当用户点击其中一个文本字段时,键盘弹出, View 向上移动,同时变成 ScrollView 。这样,用户仍然可以看到屏幕上还有哪些其他 UI 元素。用户还应该能够通过向下滑动来隐藏键盘。(Instagram 和其他大佬已经实现了这个)

我能够构建一个没有 ScrollView 的 View ,并通过 resignFirstResponder 关闭键盘:

class SignInVC: UIViewController, UITextFieldDelegate {

@IBOutlet weak var pwdField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var scrollView: UIScrollView!

var keyboardDismissTapGesture: UIGestureRecognizer?

func dismissKeyboard(sender: AnyObject) {
pwdField?.resignFirstResponder()
emailField?.resignFirstResponder()
}

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

override func viewDidAppear(_ animated: Bool) {

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

func keyboardWillShow(notification: NSNotification) {

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}

if keyboardDismissTapGesture == nil
{
keyboardDismissTapGesture = UITapGestureRecognizer(target: self,
action: #selector(self.dismissKeyboard))
self.view.addGestureRecognizer(keyboardDismissTapGesture!)
}
}

func keyboardWillHide(notification: NSNotification) {

if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}

if keyboardDismissTapGesture != nil
{
self.view.removeGestureRecognizer(keyboardDismissTapGesture!)
keyboardDismissTapGesture = nil
}
}

override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)

super.viewWillDisappear(animated)
}

我正在尝试使用 scrollView.contentSize 尝试移动它的原点: scrollView.frame.origin.y -= keyboardSize.height

或其内容大小: scrollView.contentSize = CGSize(宽度:self.view.frame.width,高度:self.view.frame.height - keyboardSize.height)

但没有任何效果。

关于键盘向下滑动的能力,有信息说在 scrollView 的属性检查器中,我可以将“Keyboard”属性更改为“Dismiss Interactively”。没用。

最佳答案

//声明一个 uitextfield 来保存您的事件文本字段

var activeTextField:UITextField!

//在 vi​​ewdidload 中添加键盘关闭点击手势

override func viewDidLoad() {
super.viewDidLoad()
keyboardDismissTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard))
}

//在文本字段中设置事件文本字段确实开始委托(delegate)

func textFieldDidBeginEditing(textField: UITextField) {
activeTextField = textField

}

func textFieldDidEndEditing(textField: UITextField) {

activeTextField = nil
}

//关闭 activeTextField 的键盘

func dismissKeyboard(){
activeTextField.resignFirstResponder()
}

//当键盘显示时调整 ScrollView 内容大小

func keyboardWillShow(notification:NSNotification){

var userInfo = notification.userInfo!
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

var contentInset:UIEdgeInsets = self.scrollView.contentInset
contentInset.bottom = keyboardFrame.size.height
self.scrollView.contentInset = contentInset
}

//键盘消失时重置 ScrollView

func keyboardWillHide(notification:NSNotification){

let contentInset:UIEdgeInsets = UIEdgeInsetsZero
self.scrollView.contentInset = contentInset
}

关于ios - 当键盘出现时移动 View 并将其呈现在 ScrollView 中。 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252589/

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