是否可以在 UIButton 的子类中设置约束?
Posted
技术标签:
【中文标题】是否可以在 UIButton 的子类中设置约束?【英文标题】:Is it possible to set up constraints in subclass of UIButton? 【发布时间】:2018-11-09 00:09:42 【问题描述】:class SpecialButton: UIButton
init()
super.init(frame: .zero)
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
我想创建一个 UIButton 的自定义按钮子类。我想设置这个按钮的约束。在视图控制器中,我可以使用view.addSubview()
方法并在那里设置button.topAnchor.constraint
,但它在这个子类中不起作用。我该如何接近它?还是我试图以错误的方式接近它?我是编码新手,请告诉我。
这是我在类中放入超级视图属性后的代码。我认为它有效并解决了我的问题。有没有更好的解决方案告诉我。
class SpecialButton: UIButton
let superView: UIView
init(superView: UIView)
self.superView = superView
super.init(frame: .zero)
superView.addSubview(self)
self.translatesAutoresizingMaskIntoConstraints = false
self.topAnchor.constraint(equalTo: superView.topAnchor).isActive = true
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
【问题讨论】:
应该是一样的...贴出视图控制器的代码 发布您尝试过的内容 我不想在视图控制器中设置约束以使其干净。有可能吗? 我在问题中放了一个新的代码块,这是在子类中添加约束的好解决方案吗? 【参考方案1】:在按钮成为视图层次结构的一部分之前,您不能添加涉及按钮顶部锚点的约束,也就是说,直到它具有超级视图。该按钮知道它何时被添加到超级视图,因为它接收到didMoveToSuperview
。这是您可以放置约束代码的最早时刻。
【讨论】:
哦,我现在明白了。非常感谢。有没有办法将潜在的超级视图放入按钮子类中? 我在问题中放了一个新的代码块,这是在子类中添加约束的好解决方案吗? 按钮的超级视图,从按钮的角度来看,是self.superview
。以上是关于是否可以在 UIButton 的子类中设置约束?的主要内容,如果未能解决你的问题,请参考以下文章
如何向放置在 UIStackView 中的以编程方式创建的 UIButton 添加约束