2017-07-24 82 views
0

我有一個圖像視圖的自定義表格視圖單元格。我試圖讓圖像視圖呈圓形,但不是圓形的,我無法確定問題。Round UIImageView

import UIKit 

class LegislatorImageCell: UITableViewCell { 

    @IBOutlet weak var repImageView: UIImageView! 
    @IBOutlet weak var repOfficeLabel: UILabel! 
    @IBOutlet weak var repNameLabel: UILabel! 
    @IBOutlet weak var repPartyLabel: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 

     repOfficeLabel.textColor = .white 
     repNameLabel.textColor = .white 
     repPartyLabel.textColor = .white 

     repImageView.layer.cornerRadius = repImageView.frame.height/2 
     repImageView.clipsToBounds = true 
     repImageView.layer.borderWidth = 2.0 
     repImageView.layer.borderColor = UIColor.white.cgColor 
     repImageView.backgroundColor = UIColor.clear 

     print("HEIGHT: \(repImageView.frame.height)") 
     print("WIDTH: \(repImageView.frame.width)") 
     print("CORNER RADIUS: \(repImageView.layer.cornerRadius)") 
    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 
} 

以下是打印語句的結果。

HEIGHT: 125.0 
WIDTH: 125.0 
CORNER RADIUS: 62.5 

enter image description here

+0

嘗試添加'repImageView.layer.masksToBounds = FALSE' –

+0

你確定了ImageView的高度等於它的寬度是多少? –

+0

@AhmadF是的。我按照我的問題中提到的那樣打印兩個值。 – raginggoat

回答

0

移動此代碼:repImageView.layer.cornerRadius = repImageView.frame.height/2updateConstraints方法。

+0

這並沒有解決這個問題。 – raginggoat

+0

@raginggoat你叫'super.updateConstraints',對吧? –

+0

倍率FUNC updateConstraints(){ super.updateConstraints() repImageView.layer.cornerRadius = repImageView.frame.height/2 } – raginggoat

0

問題是Autolayout還沒有給出它的大小。在使用視圖的框架之前先撥打self.setNeedsLayout()self.layoutIfNeeded()

+0

這並沒有解決這個問題。 – raginggoat

0

您提供的代碼不會導致您的問題。出現問題是因爲視圖佈局在awakeFromNib之後更新,之後image設置爲增加您的UIImage寬度。您必須將約束應用於repImageView;將相同的值應用於高度和寬度約束,或應用比率約束以保留repImageView的1:1比例。還要考慮將代碼從awakeFromNib移動到layoutSubviews,以便每次更新佈局時執行。

+0

當我在圖像視圖中設置IB的高度和寬度約束並將代碼移動到layoutSubviews()時,我得到了相同的結果並顯示一條消息,表示它將嘗試通過打破寬度約束來恢復。 – raginggoat

+0

意味着你有一些其他限制強制你的圖像視圖寬度。你能提供更多信息(你有哪些限制)? – XeNoN

0

您可以在

repImageView.layer.cornerRadius = repImageView.frame.height/2 

把破發點並打印repImageView.frame.height。你會意識到代碼正在做它應該做的事情。將拐角半徑設置爲當前高度的一半。

問題是高度尚未正確更新。 將您的代碼移動到viewWillLayoutSubviews()。這應該解決問題。或者如果你知道圖像視圖的最終高度/寬度。只需將它直接那裏是

whateverHeight/2 
+0

將它移動到layoutSubviews()沒有解決問題。 – raginggoat