Ich versuche, einen Radius auf die Ecke der Bilder anzuwenden, die in einer Tabelle angezeigt werden, damit sie wie ein Kreis aussehen. Das Problem ist, dass die Bilder per Autolayout lokalisiert werden, so dass die endgültige Größe nicht berechnet wird, bis die Ansicht das Layout aller Unteransichten hat und ich danach die Kreismaske codieren muss.Abgerundete Ecken auf benutzerdefiniertem UITableViewCell-Bild
Die Lösung, die zu mir kam, war es, den Code innerhalb der Methode Tableview (... willDisplayCell ...) oder innerhalb der Methoden didMoveToSuperview() und layoutSubviews() auf der benutzerdefinierten UITableViewCell Unterklasse zu schreiben. Ich habe diese Lösung in einigen Fragen dieses Forums gesehen, aber keiner von ihnen arbeitet.
Hier ist der Code mit einem dieser Methoden kommentiert:
import UIKit
struct Contact {
var name: String
var image: UIImage
}
class ActiveChatsController: UITableViewController {
let contacts = [
Contact(name: "Alex", image: UIImage(named: "Alex")!),
Contact(name: "Puto Albert", image: UIImage(named: "Albert")!),
Contact(name: "Golfo-man", image: UIImage(named: "Pablo")!)
]
override func viewDidLoad() {
self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: AppDesign.color(withIntensity: 6)]
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return contacts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Bundle.main.loadNibNamed("OpenedChatCell", owner: self, options: nil)?.first as! OpenedChatCell
cell.contactImage.image = contacts[indexPath.row].image
cell.contactName.text = contacts[indexPath.row].name
return cell
}
}
und die benutzerdefinierten Zelle Unterklasse wird aus einer XIB-Datei bekommt:
import UIKit
class OpenedChatCell: UITableViewCell {
@IBOutlet weak var contactImage: UIImageView!
@IBOutlet weak var contactName: UILabel!
/*
override func didMoveToSuperview() {
self.contactImage.layer.cornerRadius = self.contactImage.frame.width/2
self.contactImage.clipsToBounds = true
}
*/
}
Wenn ich diese Codes auf dem Simulator laufen, ich bekomme diese:
Aber wenn ich löschen th e Kommentare auf der didMoveToSuperview() -Methode und lassen Sie es, den Radius ich das bekommen ändern:
Danach schrieb ich in didMoveToSuperview():
print(self.contactImage.frame.height)
Und es zeigt eine Höhe von 177.0, so weiß ich nicht, wo der Fehler sein kann.
override func layoutSubviews() {
super.layoutSubviews()
self.contactImage.layer.cornerRadius = self.contactImage.frame.width/2
self.contactImage.clipsToBounds = true
}
Ich habe es schon versucht, aber es hat nicht funktioniert. Das Ergebnis ist das gleiche wie das zweite Bild. –
sehr seltsam, ich habe einen Code wie deiner und es funktioniert, der einzige Unterschied ist, dass ich self.contactImage.layer.masksToBounds = true anstelle von clipToBounds verwenden. –
Ich habe es jetzt in masksToBounds geändert, bekomme aber immer noch dasselbe. Es ist seltsam ...Ich werde verrückt –