2016-08-04 61 views
1

我想在UITableViewCell中自定義舍入圖像。但是,我無法獲得故事板中設置的正確寬度。爲什麼?爲什麼我在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

的'自動佈局你的tableview可能會影響它的單元格框架。如果你使用'autolayout',你最好不要使用框架。 – Catoshi

+0

我的猜測是你在錯誤的時間做這件事。我知道這是'layoutSubviews',但它可能仍然是'userImageView'尚未鋪設。 'layoutSubviews'必須在視圖層次結構之前一直滲透。你還沒有解釋這個'layoutSubviews' _is_。它在哪裏?什麼是視圖層次結構? – matt

+0

我用代碼更新了我的解釋。 – WeiJay

回答

0

一切都很好,以後我在把這些代碼layoutIfNeeded()

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

你可以嘗試這一個也

var imageWidth = userImageView.frame.size.width 

可能這將幫助你爲獲得圖像的寬度。

1

更換您的發言

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

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

因爲frameCGRect

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

在這種結構類型CGSize有以下結構

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

以相同的寬度和height.After下面寫那麼U將得到確切的圓潤形象。 imageView.layer.cornerRadius = imageView.frame.width/2 imageView.layer.borderWidth = 1 imageView.layer.borderColor = UIColor.grayColor()。CGColor imageView.layer.masksToBounds =真