图像视图不是一个完美的圆圈[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像视图不是一个完美的圆圈[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个包含UITableViewCellUIImageView

图像视图应该是一个圆圈,所以我使cornerRadius等于其高度的一半。问题是如果图像不够大(图像视图的宽度/高度约束,而不是图像本身),则不能正确舍入。如果我增加约束,一切都会正常工作。

图像是正方形,图像视图也具有1:1的比率约束。知道问题是什么吗?

我在awakeFromNib中称之为:

private func setUpCellDesign() {
    profileImageView.layer.cornerRadius = profileImageView.frame.height / 2
    profileImageView.clipsToBounds = true
    mainView.layer.cornerRadius = 15

}

我注意到即使我在单元格中添加其他元素并尝试以相同的方式对角进行圆角处理(例如带圆角的按钮),它也无法正常工作。

答案

看起来你的单元格的布局 - 子视图有问题 - 你需要更多的自动布局机制周期

您可以通过覆盖layoutSubViews来解决它并将您编写的剪辑代码放在那里。

仅当子视图的自动调整大小和基于约束的行为不提供所需的行为时,才应覆盖此方法。您可以使用实现直接设置子视图的框架矩形。

另一答案

之所以发生这种情况,是因为角半径大于min(view.frame.width, view.frame.height) / 2,这是因为在单元格具有最终帧之前调用了setUpCellDesign()

我建议将创建一个UIImageView子类,我命名为我的CircularImageView,并像这样实现它:

class CircularImageView: UIImageView {
  override func layoutSubviews() {
    super.layoutSubviews()
    clipsToBounds = true
    layer.cornerRadius = min(frame.width, frame.height) / 2
  }
}

这将确保图像视图尽可能为圆形,无论大小如何,如果它是一个矩形,角半径将适应最短边以防止你得到的尖角。

另一答案

如果您确切地知道要显示的图像视图的大小,只需使用该大小而不是调用它的profileImageView.frame.height。这将消除覆盖layoutSubviews的需要。

另一答案

只需在qazxsw poi中调用它,因为所有子视图都没有真正的帧

layoutSubviews

以上是关于图像视图不是一个完美的圆圈[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将 ui Image 制作成完美的圆圈

JAVA:放大/缩小时,圆圈被绑定到图像视图中的一个位置

在创建视图的片段期间为项目列表中的每个项目设置图像[重复]

如何重新加载圆形进度条

开发图库视图时 setAdapter 出错 [重复]

需要一种有效的方法来避免使用 Laravel 5 重复代码片段