为啥 UIImageView 在滚动之前不显示四舍五入?

Posted

技术标签:

【中文标题】为啥 UIImageView 在滚动之前不显示四舍五入?【英文标题】:Why UIImageView doesn't display rounded until scrolling?为什么 UIImageView 在滚动之前不显示四舍五入? 【发布时间】:2017-08-03 15:06:30 【问题描述】:

我的UIImageView 在滚动或重新加载集合视图时不会显示为圆形 (collectionView.reloadData())。

看起来是这样的:

不四舍五入

四舍五入

该单元格具有多个图像视图,并且所有这些视图都被限制为使用facesContainer UIView 约束。

我试图在collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 内部实现这段代码:

cell.facesContainer.layer.cornerRadius = (cell.facesContainer.layer.frame.width/2)
cell.facesGroupImageView.layer.cornerRadius = (cell.facesGroupImageView.layer.frame.width/2)
cell.facesGroupImageView.layer.masksToBounds = true
cell.facesGroupImageView.layer.borderColor = UIColor.black.cgColor
cell.facesGroupImageView.layer.borderWidth = 0.5

另外,我尝试在自定义单元类中,awakeFromNib() 方法中添加上面的代码 sn-p,但它不起作用。

为什么它不起作用?如何解决?

【问题讨论】:

你在 willdisplaycell 方法中尝试过吗 awakeFromNib 中不存在约束。 看看这个帖子-解释和解决方法:***.com/questions/32362934/… 【参考方案1】:

我认为你应该把你的代码放在这个里面:

DispatchQueue.main.async 
   // your view configurations

【讨论】:

【参考方案2】:

在 viewWillLayoutSubviews 中设置半径即可解决问题。

override func viewWillLayoutSubviews() super.viewWillLayoutSubviews() profileImageView.layer.cornerRadius = profileImageView.frame.height / 2.0

【讨论】:

以上是关于为啥 UIImageView 在滚动之前不显示四舍五入?的主要内容,如果未能解决你的问题,请参考以下文章

对于自定义 UITableViewCell 中的大图像,为啥 drawRect 滚动比 UIImageView 慢

UIImageView 在滚动之前不会加载到 UITableViewCell 中

显示和滚动比屏幕长的 UIImageView(图像)

在 tableview 单元格中将图像设置为 UIImageView 会使滚动和旋转变慢

Swift 两种UIImageView写法,为啥一种显示得出?

使用 UIImageView+AFNetworking,图像直到滚动才会出现