繁体   English   中英

如何创建动态弹出的子视图并扩展其超视图大小。 (在代码中)

[英]How do I create a SubView that pops up dynamically and expands it's superview size. (in code)

所以我目前有一个UIView子类叫做:“ InputView ”有两个子视图,一个UILabel和一个UITextField 我设置的方式是我可以更改标签和文本字段占位符,以便此InputView可以作为我的应用程序中任何输入字段的模块化组件(电子邮件,密码等)。我所要做的就是创建我的故事板中的空UIView ,将它的类设置为InputView ,其余的以编程方式完成。

现在,我遇到了一个问题。 InputView是普通的UIView ,它的约束是在故事板中设置的,但我想添加一个子视图(一个表),当用户编辑UITextField时,它会动态显示/消失。 每次表格出现时, InputView在高度上展开,将其下方的所有内容向下推,然后InputView消失。

我不知道该怎么做。 这是我想到的:

想法1:将表放在视图中,为其添加所有必要的约束,并希望InputView自行扩展。 这导致表格位于InputView的框架InputView ,因此由于某种原因无法响应用户触摸

想法2:更改InputView的边界,并将其高度扩展为表格的高度。 这不起作用,因为约束是在故事板中设置的,我无法以编程方式访问它们

想法3:经过近5个小时的研究和尝试失败后,转到StackOverflow,看看是否有人知道如何修复它。 (谢谢!)

您可以进行设置,以便可以通过编程方式更改故事板约束。

1)在故事板中,为inputView设置一个高度约束,并将其设置为当表不可见时有意义的值 - 可能在30左右。(您可能已经这样做了。)

2)然后通过控制将该高度约束拖动到与其中包含inputView的视图控制器对应的文件,为代码创建一个插座。 对话框将提示您在代码中为插座指定名称。 称之为inputViewHeightConstraint

3)然后在您的代码中,当您想使inputView具有更大的高度时,将inputViewHeightConstraint.constant设置为新值。 请注意,您需要引用.constant以设置约束的新高度。

首次为inputView设置高度约束时,请确保使其为“等于”约束(例如,其高度等于30),而不是“大于或等于”约束。 即使后者更有意义,因为你将在代码中将其更改为更大的价值,我发现这种方法存在缺陷。 使它成为一个直接的“等于”约束更加干净。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM