所以我现在有一个子类叫做:“UIView”,有两个子视图,aInputView和aUILabel。我设置它的方式是我可以更改标签和文本字段占位符,这样这个UITextField就可以作为我的应用程序中任何输入字段(电子邮件、密码等)的模块化组件,我所要做的就是在我的故事板中创建一个空的InputView,将它的类设置为UIView,剩下的都可以通过编程完成。
现在,我遇到了一个问题。InputView是普通的InputView,其约束在脚本中设置,但我想添加一个子视图(一个表),每当用户编辑UIView时,该子视图就会动态显示/消失。每当桌子出现时,UITextField就会在高度上膨胀,向下推动下面的所有东西,然后很整齐地消失。
我不知道怎么做。以下是我的想法:
想法1:将表放在视图中,为其添加所有必要的约束,并希望InputView能够自行扩展。这会导致表位于InputView的框架之外,因此出于某种原因对用户触摸没有响应
想法2:更改InputView的边界,并将其高度扩展为表的高度。这不起作用,因为约束是在情节串连板中设置的,并且我无法通过编程方式访问它们
想法3:经过近5个小时的研究和失败的尝试,去StackOverflow看看是否有人知道如何修复它。(谢谢!)

最佳答案

您可以设置一些设置,以便可以通过编程方式更改情节提要约束。
1)在情节提要中,为inputView设置一个高度约束,并将其设置为在表不可见时有意义的值——可能在30左右。(你可能已经这么做了。)
2)然后通过控件将高度约束拖动到与包含inputView的视图控制器相对应的文件,创建代码的出口。对话框将提示您在代码中为出口命名。称之为inputViewHeightConstraint
3)然后在代码中,当您希望使inputView具有更大的高度时,将inputViewHeightConstraint.constant设置为一个新值。注意,需要引用.constant才能设置约束的新高度。
当您第一次为inputView设置高度约束时,请确保它是“等于”约束(例如,它的高度等于30),而不是“大于或等于”约束。尽管后者更有意义,因为您将在代码中将其更改为更大的值,但我发现这种方法存在错误。使它成为一个直的“等于”约束更干净。

关于ios - 如何创建动态弹出的SubView并扩展其Superview大小。 (以代码形式),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42731504/

10-12 14:32