Ste*_*fan 3 uicollectionview swift
我有一个自定义 UICollectionViewLayout 滚动时调整标题高度的大小。
在标题内,我有一个 UIImageView,它被限制为单元格的高度。
我希望图像是圆形的,所以我相应地设置了角半径,但是当单元格调整大小时它会出现。约束成立,但拐角半径不更新。
let cellImage: UIImageView = {
let s = UIImageView()
s.clipsToBounds = true
s.contentMode = .scaleAspectFill
s.image = UIImage(named: "img")
s.translatesAutoresizingMaskIntoConstraints = false
return s
}()
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(cellImage)
cellImage.widthAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.75, constant: 0).isActive = true
cellImage.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.75, constant: 0).isActive = true
cellImage.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
cellImage.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
}
override var frame: CGRect {
didSet {
cellImage.layer.cornerRadius = (self.frame.height * 0.75) / 2
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
视图frame不直接存储。它是由层的属性计算position,bounds.size,transform,和anchorPoint。您在这里看到的是系统不会使用setFrame:.
而不是设置cornerRadiusin frame.didSet,overridelayoutSubviews来设置它。layoutSubviews每当视图的大小发生变化(以及在某些其他情况下)时,系统都会安排调用。
override func layoutSubviews() {
super.layoutSubviews()
cellImage.layer.cornerRadius = (frame.height * 0.75) / 2
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |