IOS自定义UITextField未在设备和情节提要上显示占位符文本

IOS自定义UITextField未在设备和情节提要上显示占位符文本,ios,swift,Ios,Swift,我对以下UITextField自定义类的占位符文本有问题。当我在设备中运行时,它根本不显示占位符文本。有时它也不能正确地显示在故事板中 import UIKit class UnderlineTextField : UITextField, UITextFieldDelegate { let border = CALayer() let numericKbdToolbar = UIToolbar() required init(coder aDecoder: NSCo

我对以下UITextField自定义类的占位符文本有问题。当我在设备中运行时,它根本不显示占位符文本。有时它也不能正确地显示在故事板中

import UIKit

class UnderlineTextField : UITextField, UITextFieldDelegate
{
    let border = CALayer()
    let numericKbdToolbar = UIToolbar()

    required init(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)!

        delegate  = self

        createBorder()
    }

    required override init(frame: CGRect)
    {
        super.init(frame: frame)

        delegate = self

        createBorder()
    }

    override func layoutSubviews()
    {
        createBorder()
    }

    func createBorder()
    {
        let width = CGFloat(2.0)

        if isEditing == false
        {
            border.borderColor = UIColor(
                                            red   : 55/255,
                                            green : 78/255,
                                            blue  : 95/255,
                                            alpha : 1.0
                                        ).cgColor
        }

        border.frame = CGRect(
                                x:      0,
                                y:      self.frame.size.height - width,
                                width : self.frame.size.width,
                                height: self.frame.size.height
                             )

        border.borderWidth = width

        self.layer.addSublayer(border)

        self.layer.masksToBounds = true

        self.keyboardType = UIKeyboardType.numberPad

        numericKbdToolbar.barStyle = UIBarStyle.default

        let space      = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
        let callback   = #selector(UnderlineTextField.finishedEditing)
        let donebutton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: callback)

        numericKbdToolbar.setItems([space, donebutton], animated: false)
        numericKbdToolbar.sizeToFit()

        self.inputAccessoryView = numericKbdToolbar
    }

    func pulseBorderColor()
    {
        border.borderColor = UIColor.white.cgColor
    }

    func normalColor()
    {
        border.borderColor = UIColor(red: 55/255, green: 78/255, blue: 95/255, alpha: 1.0).cgColor
    }

    func textFieldDidBeginEditing(_ textField: UITextField)
    {
        pulseBorderColor()
    }

    func textFieldDidEndEditing(_ textField: UITextField)
    {
        normalColor()
    }

    // MARK: On Finished Editing Function
    @objc func finishedEditing()
    {
        self.resignFirstResponder()
    }
}
我甚至试图删除具有底部边框和委托的代码,但仍然没有成功。我不确定出了什么问题。任何帮助都将不胜感激

谢谢,因为你忘了

super.layoutSubviews()

每当您覆盖函数时,您必须确保是否调用它。
super

有了苹果组件,你最好把它打开
super


至于它没有出现在故事板上,我认为这是一个Xcode错误


编辑:Xcode 9.3修复了阻止占位符文本出现在情节提要中的错误。

这是一个假定报告的Xcode错误,运行Xcode在高分辨率上。。。同样的问题


转到编辑器->自动刷新视图确保选中此选项并调用layoutifneededWow,我犯了这样一个愚蠢的错误,感觉真的很愚蠢。非常感谢。
override func layoutSubviews() {
    super.layoutSubviews()
    //...
}