菜鸟教程小白 发表于 2022-12-13 04:17:18

ios - UITextField rightView 移出 UITextField


                                            <p><p>我正在尝试使用 <code>UITextField</code> 类的 <code>rightView</code> 属性为文本字段提供后缀。一切似乎都正常工作,直到我停止编辑文本字段,此时标签被移出 <code>UITextField</code>。使用的代码是:</p>

<pre><code>class TextFieldWithSuffix: UITextField {
    var suffix: String? {
      didSet {
            let value = self.suffix ?? &#34;&#34;
            let label = UILabel(frame: CGRectZero)
            label.font = self.font
            label.text = value

            self.rightView = label
            self.rightViewMode = .Always
      }
    }

    override func rightViewRectForBounds(bounds: CGRect) -&gt; CGRect {
      var rightViewRect = super.rightViewRectForBounds(bounds)
      if let suffix = self.suffix {
            let suffixSize = NSString(string: suffix).sizeWithAttributes()
            rightViewRect.size = suffixSize
      }
      return rightViewRect
    }
}
</code></pre>

<p>第一次加载 View 时, View 如下所示:</p>

<p> <img src="/image/jcDsC.png" alt="enter image description here"/> </p>

<p>但是,当文本字段被编辑然后键盘被关闭时,它看起来像下面这样:</p>

<p> <img src="/image/EUDmZ.png" alt="enter image description here"/> </p>

<p>这已经在 iOS 7 和 8 上进行了测试,并且两者似乎都在做同样的事情。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>原来问题是再次设置 <code>rightView</code> 属性,这是在编辑完成时发生的。我发现以下版本解决了这个问题:</p>

<pre><code>class TextFieldWithSuffix: UITextField {
    var suffix: String? {
      didSet {
            let value = self.suffix ?? &#34;&#34;

            let suffixLabel = UILabel(frame: CGRectZero)
            suffixLabel.font = self.font
            suffixLabel.updateFontStyle()
            suffixLabel.text = value

            self.rightView = nil
            self.rightView = suffixLabel
            self.rightViewMode = .Always

            self.setNeedsLayout()
            self.layoutIfNeeded()
      }
    }

    override func rightViewRectForBounds(bounds: CGRect) -&gt; CGRect {
      var rightViewRect = super.rightViewRectForBounds(bounds)
      if let suffix = self.suffix {
            let suffixSize = NSString(string: suffix).sizeWithAttributes()
            rightViewRect.size = suffixSize
      }
      return rightViewRect
    }
}
</code></pre>

<p>希望这会对某人有所帮助。如果你经常这样做,你应该只更新标签的值并调用 <code>setNeedsLayout()</code> 和 <code>layoutIfNeeded()</code>,但这有效,所以我只是保持原样。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITextField rightView 移出 UITextField,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27682139/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27682139/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITextField rightView 移出 UITextField