【问题标题】:Image View is not a perfect circle [duplicate]图像视图不是一个完美的圆圈[重复]
【发布时间】:2018-06-04 14:04:47
【问题描述】:

我有一个UITableViewCell,其中包含一个UIImageView

图像视图应该是一个圆形,所以我将cornerRadius设置为它的高度的一半。问题是如果图像不够大(图像视图的宽度/高度约束,而不是图像本身),则无法正确舍入。如果我增加约束,一切都会正常。

图像是正方形,图像视图也有 1:1 的比例约束。 知道问题出在哪里吗?

我打电话给awakeFromNib

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

}

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

【问题讨论】:

  • 你有限制吗?设置maskToBounds = true

标签: ios swift autolayout


【解决方案1】:

您似乎对单元格的布局子视图有问题 - 您需要更多的自动布局机制循环

您可以通过覆盖 layoutSubViews 并将您编写的 snip 代码放入其中来解决它。

只有在自动调整大小和 子视图的基于约束的行为不提供行为 你要。您可以使用您的实现来设置框架矩形 直接访问您的子视图。

【讨论】:

    【解决方案2】:

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

    这将确保图像视图无论大小都尽可能为圆形,如果它是矩形,则角半径将适应最短边以防止出现尖角。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是偷懒的做法。如果图像与屏幕尺寸成正比,它就会损坏,如果您想在某个时候更改图像尺寸,则必须在两个地方进行更改。他拥有的代码已经比这个答案更好,他只需要在正确的时间调用它。
      【解决方案4】:

      Jsut 在layoutSubviews 中调用它,因为所有子视图现在都有它的真实框架

        override func layoutSubviews() {
                    super.layoutSubviews()
                      profileImageView.layer.cornerRadius = profileImageView.frame.height / 2
                  profileImageView.clipsToBounds = true
                  mainView.layer.cornerRadius = 15
          }
      

      【讨论】:

      • viewWillLayoutSubviews 用于视图控制器,而不用于 OP 问题单元
      • 抱歉layoutSubviews 单元格中的子视图已更新
      • 如果您override func layoutSubviews() ,请致电super.layoutSubviews()
      猜你喜欢
      • 2019-01-21
      • 2017-04-12
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      相关资源
      最近更新 更多