Вот что вам не хватало: вы использовали рамку основного вида для создания рамки вашего слоя. Вы должны использовать текстовое поле.
Также сначала нарисуйте текстовое поле правильно с ограничениями, затем добавьте слой в текстовое поле.
В viewDidLoad ваш просмотр контента загружен в основную память. В этом методе нет назначения фреймов. Поэтому используйте viewWillAppear или viewDidAppear .
Теперь, когда ваш вид будет появляться каждый раз, когда будет добавлен новый TextField и слой. Поэтому вам нужно проверить, чтобы ограничить это поведение. Например, , если текстовое поле уже добавлено к вашему виду, не добавляйте.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
view.addSubview(username)
/*
* Create the text field
*/
view.backgroundColor = .white
username.placeholder = "Name"
username.borderStyle = UITextField.BorderStyle.none
username.translatesAutoresizingMaskIntoConstraints = false
username.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
username.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
username.widthAnchor.constraint(equalToConstant: 300).isActive = true
username.heightAnchor.constraint(equalToConstant: 50).isActive = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
/*
* Here add the shap layer
*/
let bottomLine = CALayer()
/*
* Here is what you were missing.
* You were using the main view's frame instead of your textfield
*/
bottomLine.frame = CGRect(x: 0, y: username.bounds.height - 1, width: username.bounds.width, height: 1.0)
bottomLine.backgroundColor = UIColor.black.cgColor
username.layer.addSublayer(bottomLine)
}