Установка метки под панелью навигации программно в XCode - PullRequest
0 голосов
/ 28 апреля 2020

Недавно я решил прекратить использование раскадровок в моем приложении IOS. Итак, сейчас все изучаю с помощью кода. Я пытался разместить label ниже navigationBar представления, но я получил ошибку, и я не знаю, как ее отладить. Пожалуйста, просмотрите мой код и поделитесь своими мыслями.

class SellBaseViewController: UIViewController {

    lazy var container: UIStackView = {
        let stackView = UIStackView(frame: .zero)
        stackView.alignment = .fill
        stackView.axis = .vertical
        stackView.spacing = 2
        stackView.willSetConstraints()
        return stackView
    }()

    lazy var navHeader: UIView! = {
        return self.navBar()
    }()

    lazy var firstLabel: UILabel! = {
        return self.labelOne()
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        if !Authentication.shared.isAuthenticated {
            showLogin()
        } else {
            self.setupInterface()
        }
    }

    private func setupInterface() {
        self.navigationController?.navigationBar.isHidden = true
        self.embedInScrollView(content: self.container)
        navHeader.willSetConstraints()
        firstLabel.willSetConstraints()
        self.container.addArrangedSubviews([self.navHeader!, self.firstLabel!])
        DispatchQueue.main.async {

            NSLayoutConstraint.activate([
                self.navHeader.heightAnchor.constraint(equalToConstant: 44),
                self.navHeader.widthAnchor.constraint(equalTo: self.view.widthAnchor),
                self.navHeader.topAnchor.constraint(equalTo: self.container.topAnchor),
                ])
        }
    }


    // MARK: NAVBAR
    func navBar() -> UIView {
        let navBar = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: self.view.frame.width, height: 44)))
        navBar.backgroundColor = UIColor.constants.darkBlue
        let backIcon = UIImage(named: "ic_back")?.withRenderingMode(.alwaysTemplate)
        let returnButton = UIButton(type: .custom)
        returnButton.imageView?.tintColor = UIColor.white
        returnButton.setImage(backIcon, for: .normal)
        returnButton.image(for: .normal)
        returnButton.titleLabel?.font = UIFont(name: "Hind", size: 18)
        returnButton.setTitle("Sell", for: .normal)
        returnButton.setTitleColor(UIColor.white, for: .normal)
        returnButton.addTarget(self, action: #selector(self._return), for: .touchUpInside)
        returnButton.willSetConstraints()

        navBar.addSubviews([returnButton])
        NSLayoutConstraint.activate([
            returnButton.centerYAnchor.constraint(equalTo: navBar.centerYAnchor),
            returnButton.leadingAnchor.constraint(equalTo: navBar.leadingAnchor, constant: 11),
            returnButton.heightAnchor.constraint(equalToConstant: 24),
            returnButton.widthAnchor.constraint(equalToConstant: 71),
            ])
        return navBar
    }
    func labelOne() -> UILabel{
        let label = UILabel()
        label.textAlignment = .center
        label.textColor = .white
        label.font = UIFont(name: "Avenir-Light", size: 15.0)
        label.text = "This is a Label"
        self.view.addSubview(label)
        return labelOne()
    }
    @objc func _return() {
        self.backHome()
    }

}

NavBar показал себя хорошо, но когда я добавил label, приложение продолжало падать с этой ошибкой. Я не знаю, как точно узнать, что это за ошибка:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee6703fe8)

1 Ответ

1 голос
/ 28 апреля 2020
    func labelOne() -> UILabel{
        let label = UILabel()
        label.textAlignment = .center
        label.textColor = .white
        label.font = UIFont(name: "Avenir-Light", size: 15.0)
        label.text = "This is a Label"
        self.view.addSubview(label)
        return labelOne()
    }

Вы сделали:

    return labelOne()

Вы должны сделать:

    return label
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...