布局 UITextField 无论清除按钮 X

Posted

技术标签:

【中文标题】布局 UITextField 无论清除按钮 X【英文标题】:Layout UITextField regardless of clear button X 【发布时间】:2018-07-18 06:44:11 【问题描述】:

我需要将UITextField 水平居中布局,但是,由于清除按钮是其中的一部分,文本字段的(文本输入部分)看起来并不居中 - 清除按钮并不总是可见但它布局时会考虑在内。

在上图中,UITextField 水平居中,但是,没有清除按钮(右侧的 X)并且只有搜索文本,它看起来不像居中。

我能想到的一种方法是继承UITextField并提供alignmentRectInsets,对于右侧的插图,我将使用clearButtonRect(forBounds:)来获取清除按钮的大小,其width将是正确的插图为alignmentRectInsets

问题:

    Apple 的文档特别提到不应该直接调用clearButtonRect(forBounds:),所以我对此感到有些紧张;但是,从文档中感觉 Apple 的意图是让人们不改变 rect,而在我的情况下,我只是得到它的大小,我想没问题?

    有没有更好的方法来实现这一点?我知道我可以调整edgeInsets,或者给文本字段一个leftView,使文本字段看起来居中;但他们都需要对清除按钮的大小进行一些硬编码假设。

谢谢!

【问题讨论】:

您可以使用堆栈视图来管理它。在 stackView 中保留 UITextField 和按钮,并在不需要时隐藏按钮,stackView 将自动处理对齐。 @vivekDas 感谢您的回复,但我说的是 clearButton - UITextField 的子视图,而不是我添加的按钮。 你的问题不清楚,可以用按钮添加你的布局图片吗? @vivekDas 图片已添加 【参考方案1】:

您可以将 UITextField Alignment 设置为中间,然后它将起作用。查看下图

【讨论】:

它不起作用,文本在文本字段中居中,但清除按钮仍然使文本字段相对于文本字段的容器不居中。 是的,如果您的清除按钮可见,它将通过考虑按钮宽度进行对齐,但一旦按钮隐藏,文本将居中。 是的,我想要的只是当清除按钮可见时,它应该在自动布局方面被忽略。【参考方案2】:

你可以在这里控制。它可能对你有帮助。谢谢。

【讨论】:

以上是关于布局 UITextField 无论清除按钮 X的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 清除按钮调用 didEndEditing 两次

UITextField 文本重叠清除按钮

将 UITextfield“清除”默认按钮连接到 UILabel

UITextField在开始编辑时具有“清除”按钮大小

在 UITextfield 中定位“清除按钮”

UITextField 的清除按钮在 UITableViewCell 中不起作用