如何创建一个动态弹出并扩展其超级视图大小的子视图。 (在代码中)
Posted
技术标签:
【中文标题】如何创建一个动态弹出并扩展其超级视图大小的子视图。 (在代码中)【英文标题】:How do I create a SubView that pops up dynamically and expands it's superview size. (in code) 【发布时间】:2017-03-11 04:55:04 【问题描述】:所以我目前有一个名为“InputView
”的UIView
子类,它有两个子视图,一个UILabel
和一个UITextField
。我设置它的方式是我可以更改标签和文本字段占位符,以便 InputView
可以用作我的应用程序中任何输入字段(电子邮件、密码等)的模块化组件。我所要做的在我的故事板中创建一个空的UIView
,将它的类设置为InputView
,其余的以编程方式完成。
现在,我遇到了一个问题。 InputView
是普通的UIView
,其约束在情节提要中设置,但我想添加一个子视图(一个表),每当用户编辑UITextField
时动态显示/消失。每次表格出现时,InputView
的高度就会扩大,将其下方的所有内容向下推,然后非常整齐地消失。
我不知道该怎么做。这是我想做的事情:
想法1: 将表格放在视图中,为其添加所有必要的约束,并希望 InputView 自行扩展。 这导致表格在InputView
的框架之外,因此由于某种原因对用户触摸没有响应
想法 2: 更改InputView
的边界并将其高度扩展为表格的高度。 这不起作用,因为约束是在情节提要中设置的,我无法以编程方式访问它们
想法 3: 经过近 5 小时的研究和失败的尝试,请转到 ***,看看是否有人知道如何解决它。 (谢谢!)
【问题讨论】:
【参考方案1】:您可以进行设置,以便以编程方式更改情节提要约束。
1) 在情节提要中,为 inputView 设置一个高度约束,并将其设置为在表格不可见时有意义的值——可能在 30 左右。(您可能已经这样做了。)
2) 然后通过将该高度约束控制拖动到与其中包含 inputView 的视图控制器相对应的文件,为您的代码创建一个出口。一个对话框将提示您在代码中为插座命名。称它为inputViewHeightConstraint
。
3) 然后在你的代码中,当你想让你的 inputView 有更大的高度时,将inputViewHeightConstraint.constant
设置为一个新值。请注意,您需要参考 .constant 才能设置约束的新高度。
当您第一次为 inputView 设置高度约束时,请确保将其设为“等于”约束(例如,其高度等于 30)而不是“大于或等于”约束。尽管后者会更有意义,因为您将在代码中将其更改为更大的值,但我发现这种方法存在错误。使它成为一个直接的“等于”约束更干净。
【讨论】:
有效!!对于未来的旅行者,here is a great resource 了解如何对其进行动画处理(因为您为什么要在没有动画的情况下动态更改它?)祝大家好运以上是关于如何创建一个动态弹出并扩展其超级视图大小的子视图。 (在代码中)的主要内容,如果未能解决你的问题,请参考以下文章