2016-08-04 7 views
1

Ich möchte ein abgerundetes Bild in einer UITableViewCell anpassen. Ich kann jedoch nicht die richtige Breite meines Bildsets im Storyboard festlegen. Warum?Warum bekomme ich den falschen Wert der Bildbreite in UIImageView

enter image description here

class CustomTableViewCell: UITableViewCell { 

@IBOutlet weak var myImageView: UIImageView! 
@IBOutlet weak var userImageView: UIImageView! 
@IBOutlet weak var captionLabel: UILabel! 
@IBOutlet weak var gradientView: UIView! 


var photo: Photo! { 
    didSet { 
     self.updateUI() 
    } 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    userImageView.layer.cornerRadius = 0.5 * self.userImageView.frame.width 
    print("\(self.userImageView.frame.width)") // print out 1000.0 !! WHY? 
    userImageView.layer.cornerRadius = 24 // IT WORKS! 
} 



private func updateUI() { 
    self.myImageView.image = UIImage(named: photo.name) 
    self.userImageView.image = UIImage(named: photo.user) 
    self.captionLabel.text = photo.caption 
    print("\(self.userImageView.frame.width)") // print out 1000.0 !! Same here 
} 
} 
+0

Das automatische Layout ' 'Ihrer Tabellenansicht kann den Zellenrahmen beeinflussen.Wenn Sie' Autolayout' verwenden, sollten Sie besser keinen Rahmen verwenden. – Catoshi

+0

Meine Vermutung ist, dass Sie dies zur falschen Zeit tun. Ich weiß, das ist 'layoutSubviews', aber es kann immer noch sein, dass 'userImageView' noch nicht angelegt wurde. 'layoutSubviews' muss den ganzen Weg in der Ansichtshierarchie durchlaufen, bevor dies geschieht. Sie haben nicht erklärt, wo diese 'LayoutSubviews' _is_ ist. Wo ist es? Was ist die Ansichtshierarchie? – matt

+0

Ich habe meine Erklärung mit Code aktualisiert. – WeiJay

Antwort

0

Alles ist gut, nachdem ich diese Code in layoutIfNeeded setzen()

override func layoutIfNeeded() { 
    super.layoutIfNeeded() 
    userImageView.layer.cornerRadius = self.userImageView.frame.width/2 
    userImageView.layer.borderWidth = 1 
    userImageView.layer.borderColor = UIColor.white.cgColor 
    userImageView.layer.masksToBounds = true 
} 
0

können Sie versuchen diese auch

var imageWidth = userImageView.frame.size.width 

dies sein kann, wird Ihnen helfen, Bildbreite für immer.

1

Ersetzen Sie Ihre Aussage

print("\(self.userImageView.frame.width)") // print out 1000.0 !! Same here 

mit

print("\(self.userImageView.frame.size.width)") 

Da frame ist Art von CGRect

public struct CGRect { 
    public var origin: CGPoint 
    public var size: CGSize 
    public init() 
    public init(origin: CGPoint, size: CGSize) 
} 

In dieser Struktur CGSize folgende Struktur hat

public struct CGSize { 
    public var width: CGFloat 
    public var height: CGFloat 
    public init() 
    public init(width: CGFloat, height: CGFloat) 
} 
0

Nehmen Sie gleiche Breite und height.After schreiben unten dann erhält u genau gerundet Bild. imageView.layer.cornerRadius = imageView.frame.width/2 imageView.layer.borderWidth = 1 imageView.layer.borderColor = UIColor.grayColor(). CGColor imageView.layer.masksToBounds = true

Verwandte Themen