I have this weird issue where I am trying to just display textfields, buttons, programmatically, and nothing is showing up in my view. I've debugged, and set breakpoints and oddly I'm getting that the points are all being executed, but still nothing renders on my device.
in AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let loginVC = LoginViewController()
let navController = UINavigationController(rootViewController: loginVC)
window!.rootViewController = navController
window!.makeKeyAndVisible()
return true
}
In LoginViewController:
import UIKit
class LoginViewController: UIViewController {
let footerView: UIView = {
let view = UIView()
view.backgroundColor = UIColor.mainGreen()
return view
}()
let emailTextField: UITextField = {
let tf = UITextField()
tf.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [NSAttributedStringKey.foregroundColor: UIColor.mainWhite()])
tf.textAlignment = .center
tf.textAlignment = .center
tf.textColor = .white
tf.backgroundColor = UIColor.mainGreen()
tf.borderStyle = .roundedRect
tf.font = UIFont.systemFont(ofSize: 14)
return tf
}()
let passwordTextField: UITextField = {
let tf = UITextField()
tf.attributedPlaceholder = NSAttributedString(string: "Password", attributes: [NSAttributedStringKey.foregroundColor: UIColor.mainWhite()])
tf.textAlignment = .center
tf.textColor = .white
tf.isSecureTextEntry = true
tf.backgroundColor = UIColor.mainGreen()
tf.borderStyle = .roundedRect
tf.font = UIFont.systemFont(ofSize: 14)
return tf
}()
let loginButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Login", for: .normal)
button.setTitleColor(UIColor.mainGreen(), for: .normal)
button.backgroundColor = UIColor.mainWhite()
button.layer.cornerRadius = 5
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 14)
button.isEnabled = true
return button
}()
let dontHaveAccountButton: UIButton = {
let button = UIButton(type: .system)
let attributedTitle = NSMutableAttributedString(string: "Don't have an account? ", attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 14), NSAttributedStringKey.foregroundColor: UIColor.mainGreen()])
attributedTitle.append(NSAttributedString(string: "Get Started", attributes: [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 14),
NSAttributedStringKey.foregroundColor: UIColor.mainGreen()]))
button.setAttributedTitle(attributedTitle, for: .normal)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.mainWhite()
view.addSubview(footerView)
footerView.anchor(top: nil, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 60)
let stackView = UIStackView(arrangedSubviews: [emailTextField, passwordTextField, loginButton])
stackView.axis = .vertical
stackView.spacing = 10
stackView.distribution = .fillEqually
view.addSubview(stackView)
stackView.anchor(top: view.safeAreaLayoutGuide.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 40, paddingLeft: 40, paddingBottom: 0, paddingRight: 40, width: 0, height: 140)
view.addSubview(dontHaveAccountButton)
dontHaveAccountButton.anchor(top: stackView.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 12, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 50)
}
override func viewWillAppear(_ animated: Bool) {
navigationController?.isNavigationBarHidden = true
}
}
Oddly enough, the footer view is showing up, but none of the buttons, textfields, or anything else is.
Has anyone ever seen something like this? Am I missing something obvious?