0

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?

mufc
  • 695
  • 3
  • 16
  • 31

1 Answers1

1

May be because you set the stack top constraint to the bottom of the view here

stackView.anchor(top: view.safeAreaLayoutGuide.bottomAnchor

do

stackView.anchor(top: view.safeAreaLayoutGuide.topAnchor
Shehata Gamal
  • 98,760
  • 8
  • 65
  • 87