Sergey Levkachev Sergey Levkachev - 1 year ago 159
Swift Question

Setting corner radius of an element in a custom UITableViewCell

My code is almost working, but there is one issue.

As soon as the table is loaded, images looks are as follows:

As soon as the table is loaded, images looks are as follows

But when i scroll the table everything is good:

But when i scroll the table everything is good

What is missing here?

class ShopTableViewCell: UITableViewCell {

let disposeBag = DisposeBag()

@IBOutlet weak var shopImageView: UIImageView!
@IBOutlet weak var imagesCollectionView: UICollectionView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var likeButton: UIButton!
@IBOutlet weak var imageContainer: UIView!

override func layoutSubviews() {
imageContainer.clipsToBounds = true
imageContainer.layer.cornerRadius = imageContainer.frame.size.width / 2
imageContainer.layer.borderWidth = 1
imageContainer.layer.borderColor = UIColor(hex: "#BDBDBD").CGColor

Answer Source

It's because the frame property of your imageview is not updated yet.

You can make a subclass of UIImageView and do that job there, like:


class CircleImageView: UIImageView {

  override func layoutSubviews() {

    self.layer.borderWidth = 1 / UIScreen.mainScreen().scale
    self.layer.borderColor = UIColor(hex: "#BDBDBD").CGColor
    self.layer.cornerRadius = self.bounds.size.width/2
    self.layer.masksToBounds = true


@implementation CircleImageView

- (void)layoutSubviews {
    [super layoutSubviews];

    self.layer.borderWidth = 1 / [UIScreen mainScreen].scale;
    self.layer.borderColor = [UIColor whiteColor].CGColor;
    self.layer.cornerRadius = self.bounds.size.width/2;
    self.layer.masksToBounds = YES;

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download