我正在创建一个新的自定义 UIView 子类,我想在其中为该 View 使用自动布局。该 View 包含一个标签。我的自定义 View 应根据文本大小自动调整大小。我的困惑是,这行得通吗?我必须用框架初始化我的自定义 View 吗?
class CustomView : UIView
{
var label : UILabel = UILabel()
var text : String = ""
init(text: String)
{
super.init(frame: .zero)
self.text = text
setupView()
setupLayout()
}
required init(coder aDecoder: NSCoder) {
fatalError("This class does not support NSCoding")
}
func setupView() -> Void
{
self.backgroundColor = UIColor(red: 85.0/255.0, green: 88.0/255.0, blue: 91.0/255.0, alpha: 1.0)
//Create main label
let label = UILabel()
label.text = self.text
label.textColor = .white
label.font = label.font.withSize(12.0)
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.textAlignment = .left
self.label = label
addSubview(label)
}
override class var requiresConstraintBasedLayout: Bool {
return true
}
func setupLayout() -> Void
{
label.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: topAnchor),
label.bottomAnchor.constraint(equalTo: bottomAnchor),
label.trailingAnchor.constraint(equalTo: trailingAnchor),
label.leadingAnchor.constraint(equalTo: leadingAnchor),
widthAnchor.constraint(equalToConstant: 200),
heightAnchor.constraint(equalToConstant: 200)
])
}
}
这是我尝试过的..我创建了一个自己的init()
方法,我将零帧传递给 super 初始化。那是对的吗?我希望根据文本通过自动布局来完成大小。或者我是否需要在使用 CustomView 的父 View 中设置约束。
最佳答案
为什么要给标签 heightAnchor?
如果您希望它自动调整大小取决于文本,您要做的就是:
不要忘记在初始化自定义 View 时将属性 translatesAutoresizingMaskIntoConstraints 设置为 false
关于ios - 具有自动布局的 Swift UIView 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63987788/