Я знаю, что этот вопрос задавался множество раз, и есть несколько ответов.Я искал в Интернете в течение нескольких дней и прочитал сотни 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!")
}
}