Arbitur Arbitur - 9 months ago 55
iOS Question

Make view round after autolayout

I have a

with custom cells which are built from
with an identifier using

One of the
needs to be round
(layer.cornerRadius = width/2)
, it is a square in the beginning.

I have tried in
but it seems to be called before
changes its size... same thing for

Where is the proper function to update things like this to my subviews after
has changed their sizes?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell_small") as! Cell
return cell

// In Cell

override func layoutSubviews() {
rankLabel.layer.cornerRadius = rankLabel.bounds.width/2
rankLabel.layer.masksToBounds = true

override func didMoveToSuperview() {
rankLabel.layer.cornerRadius = rankLabel.bounds.width/2
rankLabel.layer.masksToBounds = true


Answer Source

What I ended up doing was making a class called RoundView

class RoundView:UIView {
    override func layoutSubviews() {

        self.layer.cornerRadius = self.bounds.width/2
        self.layer.masksToBounds = true

And then I apply it to every view I need to be round. So in Storyboard I add RoundView to Custom Class.

What was happening was that if you look inside the source of the storyboard (XML) every view had the size of the whole screen, you can look inside your own SB code. So by trying to add a corner radius equal to the width/2 inside its parent layoutSubviews() that subview hasn't got its frame set correctly. So the corner radius got the value of 320/2 instead of 50/2, thats why it got misshaped.