我有一个带有XIB的视图控制器,里面有一个视图(contentView
)。此视图包含一些按钮。
内容视图有圆角和剪辑到边界,但它不尊重剪切矩形。我在视图控制器的clipsToBounds
中设置了角半径和viewDidLoad
。
在这里您可以看到显示视图以正确方式组合的显示屏幕截图,但在模拟器和设备上不会遵循剪切边界。
任何人都可以帮助我了解发生了什么。
该应用针对iOS 10和11,两者都有相同的问题。
答案 0 :(得分:0)
我找到了一个解决方案,我在viewDidLayoutSubviews中移动clipsToBound而不是viewDidLoad,现在可以正常工作
override func viewDidLoad() {
super.viewDidLoad()
contentView.layer.cornerRadius = Dimensions.CornerRaius
contentView.dropShadow()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
contentView.clipsToBounds = true
}
答案 1 :(得分:0)
我这样定义了视图(以我的情况为UIView):
fileprivate let backView: UIView = {
let view = UIView()
view.clipsToBounds = true
view.layer.masksToBounds = false
view.layer.cornerRadius = 10
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
图片:
fileprivate let imgView: UIImageView = {
let iv = UIImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
return iv
}()
就我而言,我在自定义表格视图单元格中定义了以下元素:
class customCell: UITableViewCell {
尽管我在背景视图的定义中设置了“ clipsToBounds = true” ,但并未裁剪图像。
但是,如果稍后设置“ clipsToBounds = true” ,它将裁剪图像。
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
backView.addSubview(imgView)
contentView.addSubview(backView)
imgView.topAnchor.constraint(equalTo: backView.topAnchor, constant: 0).isActive = true
imgView.leadingAnchor.constraint(equalTo: backView.leadingAnchor, constant: 0).isActive = true
imgView.trailingAnchor.constraint(equalTo: backView.trailingAnchor, constant: 0).isActive = true
imgView.heightAnchor.constraint(equalTo: imgView.widthAnchor, multiplier: 1/4).isActive = true
backView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 0).isActive = true
backView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 15).isActive = true
backView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -15).isActive = true
backView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: 0).isActive = true
在“ init” 方法内:
backView.clipsToBounds = true