【问题标题】:elipsis dots after UITextfield for secured text entry用于安全文本输入的 UITextfield 后的省略号
【发布时间】:2016-03-24 16:37:54
【问题描述】:

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

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

密码的长度无关紧要。一样。

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

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

【问题讨论】:

  • 可能是你的 UITextField 没有足够的宽度
  • 我也是这么想的。但是如果我使用常规文本切换它会很好。所以 with 就可以了。
  • 另外,密码多长也没关系。文本字段的宽度扩大但总是削减结束
  • 在 UITextView 的背景中添加一些 UIColor,看看当你不断添加密码字符时会发生什么。你对 UITextView 有什么限制?
  • 我想出的解决方法是将文本字段固定到屏幕的宽度,这样我就不必担心字段大小调整了。

标签: ios autolayout uitextfield


【解决方案1】:

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

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

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)
}

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2013-09-15
    相关资源
    最近更新 更多