我有一个自定义 UIView,它是 UIScrollView 的子类。在 init(_ frame) 方法中,我添加了一个子视图,如下所示:
contentView = ContentView()
contentView.backgroundColor = UIColor.blue
contentView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(contentView)
contentView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
contentView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
// create contentView's Width and Height constraints
cvWidthConstraint = contentView.widthAnchor.constraint(equalToConstant: 0.0)
cvHeightConstraint = contentView.heightAnchor.constraint(equalToConstant: 0.0)
// activate them
cvWidthConstraint.isActive = true
cvHeightConstraint.isActive = true
cvWidthConstraint.constant = timelineWidth //It's non-zero
cvHeightConstraint.constant = 2.0*frame.height
问题是 contentView 框架需要时间来更新。它当然不会在 init(_ frame) 调用中更新。什么时候设置 contentView 框架,如何捕捉框架更新事件?
答案 0 :(得分:1)
内部
override func layoutSubviews() {
super.layoutSubviews()
// to do
}
您获得父视图实际框架,但请记住,因为它被多次调用
答案 1 :(得分:0)
在设置约束之前,我会确保将视图添加到父视图,例如“self.addSubview(contentView)”。如果“self”视图已经添加到视图层次结构中,那么 contentView 布局将立即生效。或者,您可以覆盖方法 viewDidMoveToSuperview,然后检查 superview 是否不为零,如果是,则初始化并将子视图 contentView 插入其中