gpt4 book ai didi

ios - 在 NavigationController 中移动 UIView 不起作用

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

好的,所以我正在尝试在我的 View 中实现一个添加评论框。这是布局:

我有一个 UITabBarController,其中包含一个 UINavigationController,我的 UIViewController 被推送到该位置。 View Layout 由一个 UITableView 和一个包含 UITextView 和一个 UIButton 的自定义 UIView 组成。

我正在监视键盘通知,这是我的代码:

override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillAppear), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillDisappear), name: UIKeyboardWillHideNotification, object: nil)
}

override func viewDidDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self)

}

func keyboardWillAppear(notification: NSNotification){
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - (keyboardSize.height + inputPanel.frame.size.height)
inputPanel.frame = frame
}
}

func keyboardWillDisappear(notification: NSNotification){
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - inputPanel.frame.size.height
inputPanel.frame = frame
}

当键盘显示时,我设置了断点并看到 y 坐标已更新,但我的 View 保持原样,隐藏在键盘后面。

一些注释。我正在使用 IQKeyboardManager 并禁用了此类的距离处理。我还使用 PureLayout 在自定义 UIView 内部布局控件。我没有为 View Controller 中的自定义 UIView 设置任何约束。 UITableView 和自定义UIView 的位置在viewWillLayoutSubview 方法中设置如下:

override func viewWillLayoutSubviews() {
let y = self.view.frame.height - 44
self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y)
self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44)
}

另一方面,这在我拥有的另一个 View 中完美运行,该 View 不是 UINavigationController 的 subview 。

正在发生的事情的屏幕截图:

带有输入 View 的 View :

view with the input view

当键盘显示时:

keyboard is shown

非常感谢任何帮助。

最佳答案

对于您没有应用约束的 View ,您需要在设置它们的框架之前告诉自动布局引擎您将要使用框架。您可以通过将 translatesAutoresizingMaskIntoConstraints 设置为 true 来实现。例如:

override func viewWillLayoutSubviews() {
let y = self.view.frame.height - 44
self.tableView.translatesAutoresizingMaskIntoConstraints = true
self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y)
self.inputPanel.translatesAutoresizingMaskIntoConstraints = true
self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44)
}

关于ios - 在 NavigationController 中移动 UIView 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829112/

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