【发布时间】:2018-04-15 23:56:54
【问题描述】:
在将文本输入文本字段时,我遇到了一个奇怪的问题。我目前正在使用下面的代码。我的代码是根据here的答案建模的。
class RocketViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, NSFetchedResultsControllerDelegate {
var offsetY:CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(RocketViewController.keyboardFrameChangeNotification(notification:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
}
@objc func keyboardFrameChangeNotification(notification: Notification) {
if let userInfo = notification.userInfo {
let keyBoardFrame = userInfo[UIKeyboardFrameEndUserInfoKey] as? CGRect
let animationDuration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double ?? 0
let animationCurveRawValue = (userInfo[UIKeyboardAnimationCurveUserInfoKey] as? Int) ?? Int(UIViewAnimationOptions.curveEaseInOut.rawValue)
let animationCurve = UIViewAnimationOptions(rawValue: UInt(animationCurveRawValue))
if let _ = keyBoardFrame, keyBoardFrame!.intersects(self.mainStackView.frame) {
self.offsetY = self.mainStackView.frame.maxY - keyBoardFrame!.minY
UIView.animate(withDuration: animationDuration, delay: TimeInterval(0), options: animationCurve, animations: {
self.mainStackView.frame.origin.y = self.mainStackView.frame.origin.y - self.offsetY
self.rocketSelectTable.frame.origin.y = self.rocketSelectTable.frame.origin.y - self.offsetY
}, completion: nil)
} else {
if self.offsetY != 0 {
UIView.animate(withDuration: animationDuration, delay: TimeInterval(0), options: animationCurve, animations: {
self.mainStackView.frame.origin.y = self.mainStackView.frame.origin.y + self.offsetY
self.rocketSelectTable.frame.origin.y = self.rocketSelectTable.frame.origin.y + self.offsetY
self.offsetY = 0
}, completion: nil)
}
}
}
}
}
在我的视图中,我有一个表格视图,其数据源为获取的结果控制器,下面是堆栈视图中的文本字段,称为 mainStackView,最终保存在核心数据存储中。
无论是计算第一响应者的偏移量,还是简单地计算堆栈视图,我都经历了这段代码的多次迭代,结果相同。当文本字段成为第一响应者时,视图会随着键盘很好地向上滑动。但是,只要我尝试在该字段中输入,视图就会立即恢复到其原始位置。我确定我犯了一个新手错误,但我无法弄清楚我做错了什么,而且我在搜索中没有发现任何东西,除了一个类似的问题 android。提前致谢。
【问题讨论】:
-
代码中某处的缩进丢失了;看到尾随关闭卷曲?
-
您上面问题中显示的代码看起来不错。我想问题出在代码中您没有添加到问题中的其他地方。也许您可以添加更多细节?
-
我真的不确定要添加什么。我有表格视图的标准委托方法。有 7 个文本字段和相应的标签。我担心在其中一个文本字段中执行自动完成功能的功能,但我将其注释掉,没有任何变化。唯一处理文本字段的其他函数是
@IBAction func didEndEditing,它由 IB 发送的“编辑结束”事件触发。我还在每个函数中都设置了断点,并且没有一个被调用。我希望我发布的代码中有一些错误导致它。