2016-09-16 5 views
1

Я пытаюсь создать UITableViewCell с цветным кругом слева. Мой план состоит в том, чтобы использовать UIButton и манипулировать его угловым радиусом слоя. Однако цветная кнопка никогда не появляется.нарисовать цветной круг в UITableViewCell

Мой XIB:

enter image description here

У меня есть IBOutlet моей ColorHolder UIButton и переменную для ее цвета.

class ColoredCircleCell: UITableViewCell { 

    @IBOutlet weak var colorHolder: UIButton! 
    @IBOutlet weak var infoRow1: UILabel! 
    @IBOutlet weak var infoRow2: UILabel! 

    var circleColor: CGColor = UIColor.clear.cgColor 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     colorHolder.layer.cornerRadius = colorHolder.bounds.size.height/2 
     colorHolder.layer.backgroundColor = circleColor 
     colorHolder.clipsToBounds = true 
} 

В моей cellForRowAt indexPath:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "CircleCell", for: indexPath) as! ColoredCircleCell 

     print(cell.colorHolder.bounds.size.height) 

     cell.colorHolder.layer.cornerRadius = cell.colorHolder.bounds.size.height/2 
     cell.colorHolder.layer.backgroundColor = UIColor.red.cgColor 

     cell.infoRow1.text = "H1" 

     return cell 
    } 

Консоль говорит мне, что размер ячейки 1000. Я предполагаю, что это до сих пор не изменяется относительно высоты строки.

EDIT: Я сузил проблему до cell.colorHolder.layer.cornerRadius = cell.colorHolder.bounds.size.height/2. Значение cell.colorHolder.bounds.size.height всегда 1000. Как извлечь правильное значение ПОСЛЕ того, как оно было отображено на экране?

Выход:

enter image description here

Как добавить настраиваемый круг для моей UITableViewCell?

+0

Проверьте ограничения кнопки, которые могут возникнуть. –

+0

Является ли размер этой кнопки динамической? Не можете ли вы просто сделать hardcode the cornerRadius? – almas

+0

Да, цель состоит в том, чтобы сделать размер кнопки динамическим. hardcoded cornerRadius определенно облегчит мою жизнь, хотя – meowmeowmeow

ответ

0

отправка ответа здесь для завершения. Я должен был добавить self.layoutIfNeeded() до доступа к границам. Этот post помог мне.

override func awakeFromNib() { 
     super.awakeFromNib() 

     self.layoutIfNeeded() 

     colorHolder.layer.cornerRadius = colorHolder.bounds.size.height/2 
     colorHolder.layer.backgroundColor = circleColor 
     colorHolder.clipsToBounds = true 
} 
0

Я думаю, что ваш набор ограничений цветовой гаммы, как topspace для супервизора и нижнего пространства для супервизора.

Если это случай, чем удалить нижнее пространство для супервизора и добавить ограничение по высоте.

чем это сделать

cell.colorHolder.layer.cornerRadius = cell.colorHolder.bounds.size.height/2 
cell.colorHolder.clipToBounds = true 

и он должен показать, как круг.

Надеется, что это будет решить вашу проблему

0

Просто переопределить layoutSubviews и установите радиус угла там.

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    self.colorHolder.layer.cornerRadius = self.colorHolder.bounds.size.height/2; 
} 
+0

попробовал и получил ту же проблему. Я добавил инструкцию println над строкой для печати cornerRadius («height: \ (colorHolder.bounds.size.height)»). я продолжал получать рост: 1000. спасибо за предложение, хотя – meowmeowmeow

+0

Можете ли вы также проверить размер ячейки в том же месте? – almas

+0

уверен. он возвращается 89.95 – meowmeowmeow

Смежные вопросы