【发布时间】:2017-04-22 15:38:03
【问题描述】:
我正在以编程方式创建 UIKit 对象,例如 UIButton、UIView、UILabels 等。
有时,我需要多次使用具有相同属性的相同视图。
示例:
如果我需要在textField 周围创建边界线,我会创建UIView 的实例:
let textFieldTopViewSeparator: UIView = {
let view = UIView()
view.backgroundColor = UIColor.gray
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
然后,设置它的约束:
func textFieldTopViewSeparatorConstraints() {
textFieldTopViewSeparator.heightAnchor.constraint(equalToConstant: 1).isActive = true
textFieldTopViewSeparator.topAnchor.constraint(equalTo: self.textField.topAnchor).isActive = true
textFieldTopViewSeparator.widthAnchor.constraint(equalTo: self.textField.widthAnchor).isActive = true
textFieldTopViewSeparator.centerXAnchor.constraint(equalTo: self.textField.centerXAnchor).isActive = true
}
并拨打viewDidLoad():
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(textFieldTopViewSeparator)
textFieldTopViewSeparatorConstraints()
}
这只会在textField的顶部创建一个边框,然后要创建一个底部,我需要创建另一个视图,给它约束,然后在viewDidLoad()中再次调用它们
所以我的问题是,有没有办法只创建一个视图实例并在不同的约束下多次使用它?即使使用不同的方式来创建视图。
【问题讨论】:
-
如果要添加两个标签,则需要创建两个
UILabel实例。 -
但是在 1 个视图控制器中创建相同实例可能会产生 6 次冗余。
-
为什么?您需要唯一的实例。一个视图只能有一个框架。
-
“有没有办法只创建一个视图实例并在不同的约束下多次使用它?” - 没有。
-
“即使使用不同的方式来创建视图。” - 不可以。给定视图在任何给定时间只能出现一次。时期。讨论完毕。您想要两个标签、两个分隔视图,还是同时需要两个“任意”视图?然后您必须创建两个标签、分隔视图或“任何”实例。