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

时间:2017-03-11 04:55:05

标签: ios swift uitableview uiview autolayout

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

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

我不知道该怎么做。以下是我的想法:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

当您第一次为inputView设置高度约束时,请务必将其设为"等于"约束(例如,它的高度等于30)而不是大于或等于"约束。即使后者更有意义,因为您将在代码中将其更改为更大的价值,但我发现这种方法存在缺陷。使它成为一个平等的#34;等于"约束更干净。