在不创建新视图或知道特定父视图的情况下向 UIButton 类添加约束
Posted
技术标签:
【中文标题】在不创建新视图或知道特定父视图的情况下向 UIButton 类添加约束【英文标题】:Add constraints to a UIButton class without creating new view or knowing specific parent view 【发布时间】:2021-07-13 18:16:59 【问题描述】:我的应用中有一堆按钮,我想为所有按钮使用同一个类(UIButton)。我需要能够在类中同时更改所有这些约束,其中一些将嵌套在不同的父视图中。它们都是在 Interface Builder 中创建的,它们嵌套在自己的 UIView 中的几个水平和垂直 UIStackViews 中。
这可能吗?
我希望做这样的事情,但我不知道如何更进一步:
class myButtonClass: UIButton
required init(coder aDecoder:NSCoder) super.init(coder: aDecoder)!
override init(frame:CGRect) super.init(frame: frame)
setConstraints()
func setConstraints()
let topMarginConstraint = NSLayoutConstraint(item: .self, attribute: NSLayoutConstraint.Attribute.topMargin, relatedBy: NSLayoutConstraint.Relation, toItem: .superview, attribute: NSLayoutConstraint.Attribute.topMargin, multiplier: 1, constant: 2)
//Additional Constraints
self.addConstraints([topMarginConstraint])
由于各种原因这不起作用,其中一些错误是因为我不知道如何将上述分配给未公开的超级视图(父视图)?
【问题讨论】:
【参考方案1】:我设法通过使用 .superview 自己解决了这个问题:
func setConstraints()
self.translatesAutoresizingMaskIntoConstraints = false
self.widthAnchor.constraint(equalTo: superview!.widthAnchor, multiplier: 0.8).isActive = true
self.heightAnchor.constraint(equalTo: superview!.heightAnchor, multiplier: 0.8).isActive = true
self.centerYAnchor.constraint(equalTo: superview!.centerYAnchor).isActive = true
self.centerXAnchor.constraint(equalTo: superview!.centerXAnchor).isActive = true
【讨论】:
以上是关于在不创建新视图或知道特定父视图的情况下向 UIButton 类添加约束的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 有没有办法在不覆盖子视图的任何手势的情况下向视图添加手势?
如何在不将实例模型添加到数据库的情况下向实体模型添加FK约束?