2016-09-23 91 views
2
class RoundImage: UIImageView { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     setupView() 
    } 

    ... 

    func setupView() { 
     self.layer.borderWidth = borderWidth 
     self.layer.borderColor = borderColor 
     self.clipsToBounds = clip 
     self.layer.cornerRadius = self.frame.size.width/2 
    } 


    override func prepareForInterfaceBuilder() { 
     super.prepareForInterfaceBuilder() 
     setupView() 
    } 

} 

我用下面的类样式我的UIImageViews。我想让他们通告。当我添加以下代码行self.layer.cornerRadius = self.frame.size.width/2以使其成为可能时,我的整个图像消失。 当我使用像50这样的硬编码值(因为我的图像的宽度是100)它可以工作。但是,当我想以这种方式使其变得动态时,它似乎失败了。图像中消失时,造型类,使一个圆形图像

我在这里错过了什么?

回答

1

我几天前遇到了这个问题。 您应该在图层修改之前添加layoutIfNeeded()

你的情况:

func setupView() { 
     self.layoutIfNeeded() 
     self.layer.borderWidth = borderWidth 
     self.layer.borderColor = borderColor 
     self.clipsToBounds = clip 
     self.layer.cornerRadius = self.frame.size.width/2 
} 
+0

完美,这终于使工作。由于xCode 8,Apple似乎对这些类型的东西更加严格。 – SoundShock

1

当此代码运行时,视图尚未调整大小,因此宽度不正确。尝试把听众放在框架上:

override var frame : CGRect { 
    didSet { 
     layer.cornerRadius = frame.size.width/2 
    } 
} 
+0

您好,我把它添加到代码,但我的ImageView的仍是空白 – SoundShock