2016-10-09 7 views
0

Ich habe eine benutzerdefinierte UITableViewCell und es funktioniert gut, aber ich habe auf xcode 8 aktualisiert und ich bin immer noch mit Swift 2.3 und nur gerade anfing, dieses Problem zu bemerken, so dass ich ' Ich bin nicht 100% sicher, wann es zu geschehen begann.UITableViewCell formatiert nicht richtig anfänglich

Ich konfiguriere eine Zelle und alles, was sie tut, ist ein kreisförmiges Etikett zu machen und eine Zahl darin zu setzen, mit einem Namen daneben. Es sollte wie folgt aussehen:

enter image description here

jedoch, wenn der Bildschirm zunächst Lasten, die kreisförmige Etikett fehlt. Wenn ich jedoch die tableView nach unten scrolle und die Zeile den Bildschirm verlässt, wenn ich zurückscrolle und es wieder scharf wird, erscheint die Beschriftung. Das selbe mit dem Zubehör, wenn ich klicke, um die Reihe zu redigieren und dann wird die Kreisbeschriftung erzeugt. Warum funktioniert es nicht bei der Erstbelastung? Hier

ist der benutzerdefinierte Code des 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

Können Sie den Code für die Methode 'cellForRowAtIndexPath' hinzufügen? – Marcio

+0

@Marcio natürlich, ich habe hinzugefügt. Nicht sicher, warum es damit anfing, es zu tun – Jonnny

+0

Meine Vermutung ist, dass 'label.frame' noch nicht gesetzt wurde, wenn' circleLabels' zum ersten Mal aufgerufen wird. Sobald es gezeichnet wurde und "label.frame" eine tatsächliche Größe hat, beginnt der Code wie erwartet zu arbeiten. Wenn ich richtig bin, sollte eine Konstante anstelle von "label.frame.size.width/2" das Problem beheben. – Marcio

Antwort

1

Meine Vermutung ist, dass label.frame noch nicht gesetzt worden, wenn circleLabels zum ersten Mal aufgerufen wird. Sobald es gezeichnet wurde und label.frame eine tatsächliche Größe hat, beginnt der Code wie erwartet zu arbeiten. Wenn ich richtig setze statt label.frame.size.width/2 eine Konstante sollte das Problem beheben.

Verwandte Themen