UITableViewCell中的UIImageView仅在滚出视觉后出现?

时间:2016-10-28 16:27:07

标签: swift uitableview uiimageview

我在表格视图单元格中添加了UIImageView,并且我通过单元格的viewWithTag方法访问了它。如果我只是将它添加到单元格的内容视图然后运行应用程序,那么图像视图就在那里,没有任何问题。但后来我想对该图像视图应用几行代码,使其成为圆形图像视图:

myImageView.layer.cornerRadius = myImageView.layer.frame.size.width / 2
myImageView.clipsToBounds = true
myImageView.layer.borderColor = UIColor.black.cgColor
myImageView.layer.borderWidth = 0.5

它看起来很好,但问题是,在我添加这些代码行之后,UIImageView不会出现,直到我向下滚动表格视图然后向上滚动以使单元格重新生成再次出现。所以基本上它意味着图像视图仅在第二次显示单元格时加载。从表格视图第一次需要显示单元格时,如何确保UIImageView已经可见?

1 个答案:

答案 0 :(得分:0)

为tableview单元格创建一个子类并将其设置在故事板中:

class MyTableViewCell: UITableViewCell {

   override func layoutSubviews() {
      super.layoutSubviews()
      // your border and corner radius settings
   }
 }

问题是您在单元生命周期的错误时间设置了这些属性。通过这种方法,它可以正常工作。

更新:另一个解决方案可能是在故事板中使用IBInspectables并在Attributes Inspector中设置它们。请参阅下面的附图和代码。

enter image description here

extension UIView {

  @IBInspectable var cornerRadius: CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
  }

  @IBInspectable var borderWidth: CGFloat {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
  }

  @IBInspectable var borderColor: UIColor {
    get {
        guard let borderc = layer.borderColor else {
            return UIColor()
        }
        return UIColor(CGColor: borderc)
    }
    set {
        layer.borderColor = newValue.CGColor
    }
  }
}