【问题标题】:Is it possible to set up constraints in subclass of UIButton?是否可以在 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")
    }
}

【问题讨论】:

  • 应该是一样的...贴出视图控制器的代码
  • 发布您尝试过的内容
  • 我不想在视图控制器中设置约束以使其干净。有可能吗?
  • 我在问题中放了一个新的代码块,这是在子类中添加约束的好解决方案吗?

标签: ios swift uiview uibutton constraints


【解决方案1】:

在按钮成为视图层次结构的一部分之前,您不能添加涉及按钮顶部锚点的约束,也就是说,直到它具有超级视图。该按钮知道它何时被添加到超级视图,因为它接收到didMoveToSuperview。这是您可以放置​​约束代码的最早时刻。

【讨论】:

  • 哦,我现在明白了。非常感谢。有没有办法将潜在的超级视图放入按钮子类中?
  • 我在问题中放了一个新的代码块,这是在子类中添加约束的好解决方案吗?
  • 按钮的超级视图,从按钮的角度来看,是self.superview
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 2011-10-14
  • 2015-11-05
  • 2020-02-12
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2020-09-19
相关资源
最近更新 更多