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

问题描述 投票:1回答:4

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

我有一个包含UITableViewCellUIImageView

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

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

我在awakeFromNib中称之为:

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

}

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

ios swift autolayout
4个回答
0
投票

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

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

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


1
投票

之所以发生这种情况,是因为角半径大于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
  }
}

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


0
投票

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


0
投票

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

layoutSubviews
© www.soinside.com 2019 - 2024. All rights reserved.