ios - 在 Xcode 中以编程方式在导航栏下方设置标签
问题描述
最近,我决定在我的 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)
解决方案
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
推荐阅读
- javascript - 谷歌脚本中的日期格式
- java - Android - 循环遍历多行文本文件并从冒号后的类别中提取数据并存储在类变量中
- javascript - Javascript删除堆栈跟踪字符串中的最后一项
- symfony - Symfony 4简化控制器中的条件代码?
- python - 如何缩进python记录器打印的多行消息?
- powershell - 如何删除具有相似名称的重复文件
- r - 如何执行网络抓取以获取 Google Play 中应用程序的所有评论?
- c# - 从服务器加载 Winforms GUI
- c# - 如何禁用/忽略 Visual Studio 2017 的 StyleCop 警告?
- leaflet - 传单中的边界框内缺少瓷砖