用于安全文本输入的 UITextfield 后的省略号点

Mik*_*ens 7 uitextfield ios autolayout

我有多个 uitextfields 设置,它们都与 IBOutlets 连接。我有一个作为密码的文本字段,并且我选择了“安全文本条目”。当我收到这张支票时,我得到了这个

任何想法为什么会发生这种情况?如果我取消选择受保护的条目,则文本字段会根据密码的大小而正常上升,没有省略号。

密码有多长并不重要。一样。 更长的密码

如果我没有选择安全文本它工作正常 没有选择安全

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

Mer*_*ert 0

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

\n\n

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

\n\n
override var intrinsicContentSize: CGSize {\n\n    let size = super.intrinsicContentSize\n    if !self.isSecureTextEntry {\n      return size\n    }\n\n    var width = size.width\n    if let font = self.font,\n    let charCount = self.text?.count {\n      width = "\xe2\x80\xa2".size(withAttributes: [NSAttributedString.Key.font : font]).width * CGFloat(charCount)\n      width += (CGFloat(charCount)+1) * 4.5 // this magic number is for letter spacing\n    }\n    return CGSize(width: width, height: size.height)\n}\n
Run Code Online (Sandbox Code Playgroud)\n