2016-07-20 11 views
0

Ich versuche, eine UITableViewController mit einem XIB, kein Storyboard zu verwenden und den Standardstil zu verwenden: UITableViewCellStyleDefault. Ich möchte den Standard imageView 's cornerRadius auf die imageView' s Breite/2, aber während cellForRowAtIndexPath() der imageView ist 0,0,0,0.Wie bekomme ich die Bildgröße der Bildansicht während CellForRowAtIndexPath?

Ich erinnere mich irgendwo lesen, dass der Rahmen nicht aktualisiert wird, bis es der Unteransicht hinzugefügt wird.

Wie bekomme ich die imageView.frame.size.width? Die UITableView zeigt die Zeilen richtig, aber die cornerRadius ist 0.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("ContactCell", forIndexPath: indexPath) 

    // Set Image 
    cell.imageView?.image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 

    // FOLLOWING DOESNT WORK imageView is 0,0,0,0 
    cell.imageView?.layer.cornerRadius = cell.imageView!.frame.size.width/2 

    cell.imageView?.clipsToBounds = true 
    cell.imageView?.layer.masksToBounds = true 

    // Set Label 
    let name:String = contactsArray![indexPath.row] as! String 
    cell.textLabel!.text = name 

    return cell 
} 
+0

Wundern Sie sich nur, haben Sie Ihrem imageView ein Platzhalterbild oder eine Höhen-/Breitenbeschränkung gegeben? – Happiehappie

+0

Nein. Da dies in einem XIB ist, kann ich keine Prototypzellen verwenden und verwende auch keine benutzerdefinierte Zelle XIB. Alles, was ich getan habe, war die Registrierung der Standard-UITableViewCell in viewDidLoad: tableView.RegisterClass (UITableViewCell.self, forCellReuseIdentifier: "ContactCell"). Nichts in der XIB getan, vor allem weil ich CANT, da es ein XIB ist kein Storyboard. Ich muss wahrscheinlich nur meine eigene UITableViewCell erstellen und einige Standardwerte angeben. – KevinS

+1

Ich habe noch nie 'UIImage.init (imageLiteral: "\ (indexPath.row) .jpg") '' verwendet, ich benutze immer 'UIImage (name:" \ (indexPath.row) .jpg ")', läuft es? –

Antwort

1

Ein möglicher Weg, um Ihr Ziel zu erreichen:
Subclass die UITableViewCell und außer Kraft setzen layoutSubviews():

override func layoutSubviews() { 
    super.layoutSubviews() 
    self.imageView?.layer.cornerRadius = cell.imageView!.frame.size.width/2 
} 
+0

Danke, das hat funktioniert! Ich habe eine benutzerdefinierte UITableViewCell .xib und .swift-Dateien erstellt scheint so einfach zu sein, aber ich hatte gehofft, die Standardklasse UITableViewCell zu verwenden, die bereits eine imageView enthält. – KevinS

2

Unterhalb Linie wont Layout irgendwelche UIs noch, so dass Sie an dieser Stelle keine Art von Bedeutung bekommen können.

cell.imageView?.image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 

Eine Möglichkeit ist, die Bildgröße

let image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 
cell.imageView?.image = image 
let size = image.size 

Dann macht den Rest mit dieser Größe zu erhalten.

Wenn Ihre Bilder jedoch zu groß sind, müssen Sie möglicherweise nach Möglichkeiten suchen, die Größe entsprechend zu ändern, da das Bild entsprechend der Größe des tatsächlichen Bildes geladen wird und es möglicherweise nicht wie erwartet aussieht.

+0

Ja, so sieht es aus, die Zelle hat noch keine Dimensionen. Das Einzige mit Dimensionen ist mein Bild und ja, Es ist nicht die Größe, die ich will. Ich werde versuchen, eine benutzerdefinierte XIB-Zelle erstellen und geben Sie einige Standardeinstellungen. Ich dachte, ich könnte dies minimal mit Apples Standard-UITableViewCell tun, aber sieht aus wie das ist wahrscheinlich ein NEIN. – KevinS

Verwandte Themen