处理autolayout特例

时间:2015-04-18 04:02:01

标签: objective-c uitextfield autolayout

我已经建立了类似于按钮,时间戳按钮等在文本字段底部下方一定距离的约束。你可以在图像中看到问题;如果文本字段没有足够的字母,它们重叠,我该如何解决?这是图像的链接: https://docs.google.com/document/d/1_btZBSsL3SQA1IulFTasMFBghF_2hJYzrFlbuQPkKrM/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

问题是针对文本域底部设置约束。该底部的移动取决于该字段的文本数量,如果该底部位置位于文本字段左侧图标的底部位置之上,您将获得所看到的重叠。您可能认为,解决方案是设置相对于图标底部的约束,但是当文本字段包含大量文本时,它不会起作用。你应该尝试更清楚地理解问题。

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

您会在哪里以编程方式设置此约束?可能在textField:shouldChangeCharactersInRange:replacementString:的{​​{1}}委托方法中。

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

为了澄清我的答案,在下面的评论中讨论之后,这里有一个关于容器视图和设置它们之间约束的意思的图片,以避免观察到的重叠。

enter image description here

在每个容器视图中设置适当的约束,然后在容器视图之间以及它们和单元格内容视图之间设置约束(我假设,从您的图片中,您在表格视图中拥有所有这些你有一些模板表视图单元格。