viewDidLoad 之外的闭包
Posted
技术标签:
【中文标题】viewDidLoad 之外的闭包【英文标题】:Closures outside viewDidLoad 【发布时间】:2017-09-10 05:39:01 【问题描述】:我想创建一个没有 Storyboard 的简单应用。我在viewDidLoad
方法之外创建了一个闭包,它代表屏幕上的标题。我的问题是代码包含重复的行 view.addSubview(label)
并将标签放置在错误的位置。
你能帮我解决这个问题吗?
class HomeVC: UIViewController
let titleLabel: UILabel =
let view = UIView()
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
label.text = "Hello"
return label
()
override func viewDidLoad()
super.viewDidLoad()
view.addSubview(titleLabel)
【问题讨论】:
【参考方案1】:我认为您想将标签设置在 HomeVC 视图的中心,上面代码中的问题是您正在创建一个新视图并将标签放置在视图内,这不是您想要的,所以
你只需像这样先制作标签:
let titleLabel: UILabel =
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello"
return label
()
然后在viewDidLoad
中将此标签添加为视图的子视图并应用约束
override func viewDidLoad()
super.viewDidLoad()
view.addSubview(titleLabel)
setupTitleLabel()
func setupTitleLabel()
titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
//you also need to give the label height and width constraints to label here...
【讨论】:
感谢您的回答。它有效,我只是想在 viewDidLoad 中添加最少的代码。以上是关于viewDidLoad 之外的闭包的主要内容,如果未能解决你的问题,请参考以下文章