This question似乎接近我需要的东西,但并不完全......
我有一个UIView(确切地说是UITableView),它有一组指定的AL约束,通常来自IB(它应该是一个可重用的类,所以这就是“通常”)的原因。
键盘弹出时我需要轻推底部。我知道如何获取键盘事件和键盘大小,因此获取数字和执行线程不是问题。
轻推底部是。因为这是一个可重用的类,并且控制器的权限不会扩展到UITableView之外(这是表的较低AL约束所在的位置),所以我不能将“约束绑定到控制器”这样做,否则我会做
这意味着我需要以编程方式获得约束。如果没有约束,那么我需要知道,所以我可以告诉视图以老式的方式搭起它的裙子。
如果存在布局约束,那么我需要获得一个锚定表视图底部的约束。
由于那里可能存在各种垃圾(就像人们分配多个约束一样),我不能只抓住锚中的第一个约束。
我有一种感觉,没有实际的解决方案,我最终会扩展表格视图的可滚动内容大小的底部,并且连接contentOffset。这样可行,但不会那么“酷”。 :)
有什么想法吗?
答案 0 :(得分:2)
您可以将IB中的约束链接到您的代码文件,就像链接您的视图一样。
之后你可以在代码中执行此操作
constraintOutletName.constant = 100.0 //set the value of the constraint
答案 1 :(得分:1)
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
self.tableViewBotCon.constant = -1 * keyboardSize.height
self.view.layoutIfNeeded()
}
}
@objc func keyboardWillHide(notification: NSNotification) {
self.tableViewBotCon.constant = 0
self.view.layoutIfNeeded()
}
答案 2 :(得分:0)
答案是...... 我能收到信封吗? ......
“Yew Cain't Git Thar F'm Here。” - 至少,不是以理智的方式。
主要是因为可以附加到锚点的约束数量混乱(包括不适合该法案的约束)。
我正在使用我已经在研究的技术(并通过上面的答案提到)更简单地解决这个问题。
我会绿色检查答案,即使它基本上说要做我已经在做的事情,因为这是解决问题的正确方法。
[更新] 嗯,这很烦人。显然,在iPad上,它已经在操作系统中执行此操作,因此我需要添加一个重复的“成语”检查。
[更新2] 并非如此简单。看起来好像iPad描述的键盘是屏幕上键盘高度的两倍。
[更新3] 嗯...... lookee here what I found。
[更新4] 原来问题是关于开场动画。我需要进一步了解键盘记录。当我看到高度时,我正在看Y的起源。