我有下一个问题。
我有这个登录屏幕
当登录或密码文本字段处于焦点时,我们显示键盘。键盘覆盖了我的视线。
所以我尝试用观察者制作NotificationCenter并实现方法:
@objc func kbDidShow(notification : NSNotification) {
guard let userInfo = notification.userInfo else { return }
let kbFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
(self.view as! UIScrollView).contentSize = CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height + kbFrameSize.height)
(self.view as! UIScrollView).scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: kbFrameSize.height, right: 0)
}
因此,当键盘出现时,我正在为视图添加kb大小。此外,你可以看到我添加了scrollview。
我认为scrollview工作正常
BUT
当我滚动我的登录表单时,仍然通过键盘覆盖。如果我滚动到最后,我会看到我的视图会重复,因为它有渐变。
我认为,我在kb下登录表单的问题是我的最后一个按钮“Забылипароль?”具有常量92的底部约束(另一个元素我开始计算来自此按钮的约束)。当我删除它,一切正常,但我不能在没有约束的情况下工作。此外,我无法更改约束以使用顶部约束,因为对我来说从底部登录表单92pt非常重要。
解决方案我认为,将添加我的按钮的现有约束“забылипароль?”现有约束+ kb高度。
我是如何做到的?
My bytton“Забылипароль?”在名为forgetPassword
的代码中第二个问题,当用户在焦点上设置登录或密码字段时,如何添加动画以便将我的登录表单平滑滚动到视图中心? 我需要将字段“loginPassword”设置为查看中心
答案 0 :(得分:1)
将底部按钮的底部约束拖动为IBOulet
并执行此操作
@objc func kbDidShow(notification : NSNotification) {
guard let userInfo = notification.userInfo else { return }
let kbFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
self.buttonBottomcon.constant = kbFrameSize.height
UIView.animateWithDuration(1.0,
{
self.view.LayoutIfNeeded()
}
}
隐藏键盘时
@objc func kbWillHide(notification : NSNotification) {
self.buttonBottomcon.constant = 0
UIView.animateWithDuration(1.0,
{
self.view.LayoutIfNeeded()
}
}
答案 1 :(得分:1)
write this code solve your problem:-
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardHideShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardHideShow), name: Notification.Name.UIKeyboardWillHide, object: nil)
@objc func keyboardHideShow()
{
self.constraintHeightHeader.constant = (self.topconstraint.constant == new_value) ? old_value : new_value
}