在UITextfield之后的elipsis点用于安全文本输入

时间:2015-12-18 02:28:48

标签: ios autolayout uitextfield

我有多个uitextfields设置,它们都与IBOutlets连接。我有一个密码的文本字段,我有“安全文本条目”#39;选择。当我有这个检查时,我得到了

为什么会这样?如果我取消选择安全条目,则文本字段会根据密码的大小而没有省略号。

密码有多长并不重要。一样。 longer password

如果我没有选择安全文本,它可以正常工作 no security selected

知道为什么吗?它可能是宽度问题,因为它会自动调整大小。但是为什么“安全”文本输入会被输入'导致问题?

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题。我认为这是UITextfield的错误。它计算文本的大小,但不计算安全文本(点)的大小。当文本包含1,l等细长字符时,我遇到了问题。

作为解决方法,我将UITextfield类子类化,并覆盖了internalContentSize函数。您可能需要调整字母间距。我找不到如何根据字体动态获取它。

override var intrinsicContentSize: CGSize {

    let size = super.intrinsicContentSize
    if !self.isSecureTextEntry {
      return size
    }

    var width = size.width
    if let font = self.font,
    let charCount = self.text?.count {
      width = "•".size(withAttributes: [NSAttributedString.Key.font : font]).width * CGFloat(charCount)
      width += (CGFloat(charCount)+1) * 4.5 // this magic number is for letter spacing
    }
    return CGSize(width: width, height: size.height)
}