处理自动布局特殊情况

Handling autolayout special case

我已将点赞按钮、时间戳按钮等限制在文本字段底部下方一定距离。您可以在图像中看到问题;如果文本字段没有足够的字母,它们会重叠,我该如何解决?这是 link 的图像: https://docs.google.com/document/d/1_btZBSsL3SQA1IulFTasMFBghF_2hJYzrFlbuQPkKrM/edit?usp=sharing

问题是针对文本字段 底部 设置约束。该底部会根据该字段的文本量移动,如果该底部位置高于文本字段左侧图标的底部位置,您将看到重叠部分。您可能会认为,解决方案是针对图标底部设置约束,但当文本字段包含大量文本时,这将不起作用。您应该尝试一下,以便更清楚地了解问题。

实际的解决方案是以编程方式设置此特定约束,因为文本已输入到文本字段中。您想要针对具有最低底部的视图(图标或文本字段)的底部设置该约束。这样,对于很少的文本,约束是相对于图标底部设置的,但是当文本字段有足够的文本垂直延伸到图标下方时,约束是相对于文本字段设置的。

您将在何处以编程方式设置此约束?可能在UITextField.

textField:shouldChangeCharactersInRange:replacementString:委托方法中

或者 - 也许是更好的解决方案 - 您可以拥有一个包含图标和文本字段的视图,并相对于容器视图的底部设置相关约束。这样您就可以在 IB 中设置约束,而不必以编程方式进行。

为了澄清我的回答,在下面的评论中进行了讨论之后,这里有一张图片说明了我的意思,即拥有容器视图并在它们之间设置约束以避免观察到的重叠。

在每个容器视图中设置适当的约束,然后在容器视图之间以及它们与单元格内容视图之间设置约束(我假设,根据您的图片,您将所有这些都放在 table view 所以你有一些模板 table view cell).