2016-10-09 3 views
0

У меня есть обычай UITableViewCell, и он работал нормально, но я обновился до xcode 8, и я все еще использую Swift 2.3 и только начал замечать эту проблему, m не на 100% уверен, когда это начнет происходить.UITableViewCell не форматируется должным образом изначально

Я настраиваю ячейку, и все, что она делает, это сделать этикетку круговой и поместить внутри нее число с именем рядом с ним. Он должен выглядеть следующим образом:

enter image description here

Однако, когда экран первоначально нагрузки, круговая метка отсутствует. Если я прокручу вниз по таблицеView, хотя и строка покидает экран, когда я прокручиваю назад и снова становится в фокусе, появляется метка. То же самое с аксессуаром, если я нажму, чтобы отредактировать строку, а затем вернуть метку круга. Почему он не работает на начальной загрузке?

Вот пользовательский код UITableViewCell:

func circleLabels(label: UILabel, hex: String){ 
    label.layer.cornerRadius = label.frame.size.width/2 
    label.layer.masksToBounds = true 
} 

func configureForPlayer(player: Player) { 
    playerName.text = player.name 
    jerseyLabel.text = String(player.jersey) 
    circleLabels(jerseyLabel, hex: "#6470FF") 
} 

CellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("PlayerCell", forIndexPath: indexPath) as! PlayerCell 
    let player = fetchedResultsController.objectAtIndexPath(indexPath) as! Player 
    cell.configureForPlayer(player) 
    return cell 
} 
+0

Можете ли вы добавить код метода 'cellForRowAtIndexPath'? – Marcio

+0

@ Марсио, конечно, я добавил. Не уверен, почему он прекратил делать это изначально – Jonnny

+0

Мое предположение заключается в том, что 'label.frame' еще не установлен, когда вызываются« круглые метки »в первый раз. После того, как он был нарисован, и 'label.frame' имеет фактический размер, тогда код начинает работать как ожидалось. Если я правильно поместил константу, а не 'label.frame.size.width/2', исправьте проблему. – Marcio

ответ

1

Я думаю, что label.frame еще не был установлен, когда circleLabels вызывается в первый раз. После того, как он был нарисован, и label.frame имеет фактический размер, тогда код начинает работать как ожидалось. Если я правильно поставил константу вместо label.frame.size.width/2, исправьте проблему.

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