视图元素未显示在ViewController中

时间:2018-08-13 22:16:16

标签: ios swift viewcontroller

我遇到一个奇怪的问题,我试图以编程方式仅显示文本字段,按钮,而在我的视图中什么都没有显示。我已经调试,设置了断点,奇怪的是,这些点都已被执行,但是在我的设备上仍然没有任何渲染。

在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
    }

在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
    }

}

奇怪的是,显示了页脚视图,但是没有按钮,文本字段或其他任何东西。

有人见过这样的东西吗?我缺少明显的东西吗?

1 个答案:

答案 0 :(得分:1)

可能是因为您在此处将堆栈顶部约束设置为视图的底部

stackView.anchor(top: view.safeAreaLayoutGuide.bottomAnchor

stackView.anchor(top: view.safeAreaLayoutGuide.topAnchor
相关问题