首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextField rightView在UITextFiled之外移动

UITextField rightView在UITextFiled之外移动
EN

Stack Overflow用户
提问于 2014-12-29 00:48:41
回答 1查看 1.3K关注 0票数 3

我试图使用rightView类的UITextField属性为文本字段提供后缀。这一切似乎都是正确的,直到我停止编辑文本字段,此时标签被移出UITextField。所用的代码是:

代码语言:javascript
复制
class TextFieldWithSuffix: UITextField {
    var suffix: String? {
        didSet {
            let value = self.suffix ?? ""
            let label = UILabel(frame: CGRectZero)
            label.font = self.font
            label.text = value

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

    override func rightViewRectForBounds(bounds: CGRect) -> CGRect {
        var rightViewRect = super.rightViewRectForBounds(bounds)
        if let suffix = self.suffix {
            let suffixSize = NSString(string: suffix).sizeWithAttributes([NSFontAttributeName: self.font])
            rightViewRect.size = suffixSize
        }
        return rightViewRect
    }
}

第一次加载视图时,视图如下所示:

但是,当文本字段被编辑后键盘被取消时,如下所示:

这已经在iOS 7和8上进行了测试,两者似乎都在做同样的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-30 14:35:11

结果,问题是再次设置了rightView属性,这是在编辑完成时发生的。我发现以下版本解决了这个问题:

代码语言:javascript
复制
class TextFieldWithSuffix: UITextField {
    var suffix: String? {
        didSet {
            let value = self.suffix ?? ""

            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) -> CGRect {
        var rightViewRect = super.rightViewRectForBounds(bounds)
        if let suffix = self.suffix {
            let suffixSize = NSString(string: suffix).sizeWithAttributes([NSFontAttributeName: self.font])
            rightViewRect.size = suffixSize
        }
        return rightViewRect
    }
}

希望这能帮上忙。如果您经常这样做,您应该更新标签的值,并调用setNeedsLayout()layoutIfNeeded(),但是这是有效的,所以我只是保留它的原样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27682139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档