View Controller становится белым, как только несколько UITexfields или ограничений добавляются и приложение запускается - PullRequest
0 голосов
/ 24 сентября 2019

Я знаю, что этот вопрос задавался множество раз, и есть несколько ответов.Я искал в Интернете в течение нескольких дней и прочитал сотни StackOverflow и других статей, касающихся этой проблемы.

Когда я проектирую свой вид программно, все работает, пока я не добавляю несколько текстовых полей пользовательского интерфейса, экран становится белым, когда вызапустить приложение.Когда у меня есть только 1 текстовое поле и кнопка в UIView или UIStackView, он работает и загружается.

Я следовал рекомендованному Apple способу настройки контроллеров представления и даже вытолкнул этот файл непосредственно из AppDelegate ион по-прежнему становится белым.

Примерно через 2-3 минуты приложение наконец-то аварийно завершает работу со следующим кодом: Поток 1: EXC_RESOURCE RESOURCE_TYPE_MEMORY (предел = 650 МБ, не используется = 0x0)

Когда вы смотрите память, она увеличивается и увеличивается, а затем падает каждый раз, когда это происходит.Если я удаляю весь свой код и создаю базовый интерфейс, он работал нормально.

Я проверил свои контрольные точки, их нет.Я очистил мои производные данные все еще происходит.Я попробовал на iPhone 7, 8 и XR аналогичные, а также на физическом iPhone XR и iPhone 6, все то же самое, все устройство белого цвета.

Я ищу некоторые указания относительно того, где ясделал ошибку в моем коде, который будет причиной этого.

Код ниже, контроллера LoginView и вида входа в систему, который вызывает белизну.

LoginView.swift

class LoginView: UIView {

    fileprivate enum Text: String {
        case email, password
        case login = "Log In"
    }

    fileprivate enum Font: String {
        case regular = "AvenirNext-Regular"
    }

    let emailTextField: UITextField = {
        let textField = UITextField()
        textField.placeholder = Text.email.rawValue.capitalized
        textField.font = UIFont(name: Font.regular.rawValue, size: 17.0)
        textField.textColor = UIColor.darkGray
        textField.minimumFontSize = 17.0
        textField.borderStyle = UITextField.BorderStyle.roundedRect
        textField.setUpKeyboard(KeyboardType.email, returnKeyType: UIReturnKeyType.next)
        return textField
    }()
    let passwordTextField: UITextField = {
        let textField = UITextField()
        textField.placeholder = Text.password.rawValue.capitalized
        textField.font = UIFont(name: Font.regular.rawValue, size: 17.0)
        textField.textColor = UIColor.darkGray
        textField.minimumFontSize = 17.0
        textField.borderStyle = UITextField.BorderStyle.roundedRect
        textField.setUpKeyboard(KeyboardType.password, returnKeyType: UIReturnKeyType.send)
        return textField
    }()
    let loginButton: UIButton = {
        let button = UIButton(type: UIButton.ButtonType.system)
        button.titleLabel?.font = UIFont(name: Font.regular.rawValue, size: 17.0)
        button.setTitle(Text.login.rawValue, for: UIControl.State.normal)
        button.setTitleColor(UIColor.white, for: UIControl.State.normal)
        button.backgroundColor = UIColor.clear
        button.layer.borderColor = UIColor.white.cgColor
        button.layer.borderWidth = 1.0
        button.setCorner(radius: 5.0)
        return button
    }()

    fileprivate lazy var stackView: UIStackView = { [unowned self] in
        let stackView = UIStackView(arrangedSubviews: [self.emailTextField, self.passwordTextField, self.loginButton])
        stackView.axis = NSLayoutConstraint.Axis.vertical
        stackView.distribution = UIStackView.Distribution.fillEqually
        stackView.alignment = UIStackView.Alignment.fill
        stackView.spacing = 10.0
        return stackView
        }()

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setSubviewForAutoLayout(self.stackView)
        self.backgroundColor = UIColor.darkGray

        self.stackView.snp.remakeConstraints { [unowned self] (make: ConstraintMaker) in
            make.center.equalTo(self)
            make.leading.equalTo(self).offset(40.0)
            make.trailing.equalTo(self).offset(-40.0)

        }

        self.emailTextField.snp.makeConstraints { [unowned self] (make: ConstraintMaker) in
            make.height.equalTo(self).multipliedBy(0.075)
        }
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


}

LoginViewController.swift

class LoginViewController: UIViewController {

    override func loadView() {
        self.view = LoginView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.loginButton.addTarget(self, action: #selector(loginButtonPressed), for: UIControl.Event.touchUpInside)
        // Do any additional setup after loading the view, typically from a nib.
    }

    // MARK: - IBOutlets
    weak var loginView: LoginView! { return self.view as! LoginView }
    weak var emailTextField: UITextField! { return loginView.emailTextField }
    weak var passwordTextField: UITextField! { return loginView.passwordTextField }
    weak var loginButton: UIButton! { return loginView.loginButton }

    // MARK: - IBActions
    @objc func loginButtonPressed() {
        print("Login!")
    }

}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Проверьте свои ограничения.Они все правы?Создание ваших ограничений на раскадровку может помочь.Также не могли бы вы прислать скриншоты?

0 голосов
/ 24 сентября 2019

Похоже, вы не правильно подключили свой код.Например, текстовое поле электронной почты, текстовое поле пароля и другие переменные должны выглядеть следующим образом: @IBOutlet weak var emailTextField: UITextField!, чтобы содержимое контроллера представления связывалось с вашим кодом в вашем классе.

...