在上面的GIF中,=B4
应该是键盘避开视图。它永远不会被键盘覆盖。当开始编辑其中任何一个文本字段时,loginMenu
确实会被推送到#34;但是,在编辑时,loginMenu
会返回其原始位置。这有什么不对?这是我的代码:
loginMenu
答案 0 :(得分:1)
不要使用键盘会改变(当选择听写时你也会得到不正确的行为)。而是使用willShow然后将消失以移动您的视图/字段。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
我还在UITextInputCurrentInputModeDidChange上放置了一个观察者来解决听写和谷歌键盘等问题。
另一种方法是使用IQKeyboardManagerSwift,除非您有充分的理由订购自定义版本。
答案 1 :(得分:1)
您可以使用do.call(rbind, lapply(1:length(kmean), function(x) kmean[[x]]$cluster))
删除此问题,
为例子
self.view.layoutIfNeeded()
heare work of self.view.layoutIfNeeded(): -
基本上调用self.view.layoutIfNeeded()会强制self.view及其子视图的布局,如果有些更改为self.view设置setNeedsLayout。
setNeedsLayout用于设置一个标志,每当调用layoutIfNeeded()时,都会调用layoutSubviews。这是决定"如果需要"电话的方面。
如果你对UIView进行了更改,导致它设置为setNeedsLayout但是没有调用layoutIfNeeded()(因此不调用layoutSubviews),它将不会更新,因此可能会导致动画出现问题。如果您事先调用它,它将确保如果有更改需要更新布局,那么它将在动画制作之前将其应用于您的视图及其所有子视图。
当然,动画制作动画时需要更新。
答案 2 :(得分:1)
以下是解决方案,创建loginMenu
视图
@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
@IBOutlet weak var loginMenu: UIView!
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardNotification), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardNotification), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
}
@objc func handleKeyboardNotification(_ notification: Notification) {
if let userInfo = notification.userInfo {
let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue
let isKeyboardShowing = notification.name == NSNotification.Name.UIKeyboardWillShow
bottomConstraint?.constant = isKeyboardShowing ? -keyboardFrame!.height : 0
UIView.animate(withDuration: 0.5, animations: { () -> Void in
self.view.layoutIfNeeded()
})
}
}