无法通过CGRect定位UIImageView?社交资料头部视图开发遇阻
问题原因
你初始化profileImage时就设置了cornerRadius,但此时imageView的frame是图片的原始尺寸。后续在layoutSubviews里把它的frame改成128x128后,cornerRadius还是初始的大数值(比如图片宽200的话就是100),这个数值远大于新宽度的一半(64)。再加上clipsToBounds = true,整个头像就被完全裁剪掉了,所以看不到。
解决办法
有两种可行的修复方式:
方式一:把圆角和边框设置移到布局方法里
修改layoutSubviews方法,每次布局时基于当前frame更新圆角和边框属性:
override func layoutSubviews() { super.layoutSubviews() profileImage.frame = CGRect( x: bounds.midX - 64, y: bounds.midY - 64, width: 128, height: 128 ) // 基于当前frame重新设置圆角和边框 profileImage.layer.cornerRadius = profileImage.frame.size.width / 2 profileImage.layer.borderColor = UIColor.white.cgColor profileImage.layer.borderWidth = 3 }
同时简化profileImage的初始化代码:
private lazy var profileImage: UIImageView = { let imageView = UIImageView(image: UIImage(named: "hipsterCat")) imageView.clipsToBounds = true return imageView }()
方式二:保留边框设置,仅在布局时更新圆角
这种方式可以避免重复设置边框,同时给图片添加适配模式防止拉伸:
private lazy var profileImage: UIImageView = { let imageView = UIImageView(image: UIImage(named: "hipsterCat")) imageView.contentMode = .scaleAspectFill // 保证图片填充且不变形 imageView.clipsToBounds = true imageView.layer.borderColor = UIColor.white.cgColor imageView.layer.borderWidth = 3 return imageView }()
然后在layoutSubviews里补充圆角更新:
override func layoutSubviews() { super.layoutSubviews() profileImage.frame = CGRect( x: bounds.midX - 64, y: bounds.midY - 64, width: 128, height: 128 ) profileImage.layer.cornerRadius = profileImage.frame.size.width / 2 }
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

