2016-05-10 16 views
0

カスタマイズしたテーブルビューセルを作成し、そのセルにUIImageViewを追加しました。私は画像ビューを円形にしたい、下のコードを参照してください。テーブルが最初に表示されているときにcircularImageView.boundsの値が正しくないと画像が円形にならないという問題があります。テーブルビューをリフレッシュした後、画像が正しいように見えます。どのようにテーブルビューの最初の読み込みを処理するには?テーブルビューセル内の画像ビューでcornerRadiusを設定する方法

class CircularTableViewCell: UITableViewCell { 
    @IBOutlet weak var circularImageView: UIImageView! 

    override func layoutSubviews() { 
     circularImageView.layer.cornerRadius =  
     circularImageView.bounds.height/2 
     circularImageView.clipsToBounds = true 
     circularImageView.layer.masksToBounds = true 
    } 

この値をcellForRowAtIndexpathに設定しようとしました。初めてあなたはcellForRowAtIndexpath方法で角の半径を設定することができたり、UITableViewCellのサブクラスであるカスタムセルクラスのawakeFromNibメソッドを使用することができ、このセルに

答えて

1

セットコーナー半径awakeFromNibメソッド。

override func awakeFromNib() { 
super.awakeFromNib() 

    circularImageView.layer.cornerRadius = circularImageView.bounds.height/2 

    circularImageView.clipsToBounds = true 

} 
+0

私はこのメソッドを試しただけで、まだ動作しません。 circularImageView.bounds.heightの値は、制約値ではなく、ペン先の任意の集合です。 –

1

を示すときしかしcircularImageView.bounds.heightが制約されていません。

これは役に立ちます。

+0

この値をcellForRowAtIndexpathに設定しようとしました。しかし、circularImageView.bounds.heightは初めてこのセルを表示するときに制約されません。 –

+0

私はあなたが言ったことを得ていません! – Lion

+0

このメソッドが初めて呼び出されたときに、circularImageView.bounds.heightの値が間違った値になりました。私は、セルがUIに追加されていないと思うので、値はxibに設定された任意の値です。テーブルをリフレッシュすると、以前にUIに追加されていたので、この値は正しくなります。私の質問は、最初にテーブルビューをロードするときにcornerRadius値を設定する方法です。 –

0

イメージは、円形イメージを作成できるよりも高さが同じでなければなりません。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellIdentifier", forIndexPath: indexPath) as! CustomCellIdentifier 
cell.yourImageView.layer.cornerRadius = cell.yourImageView.frame.size.height /2; 
cell.yourImageView.layer.clipToBounds = true; 
return cell; 

} 

私はそれがあなたのために完全に役立つと思う。何か問題がある場合は教えてください。

+0

このメソッドを試しましたが、初めてセルを表示するときにcell.yourImageView.frame.size.heightの値が正しくありません。 –

+0

これはあなたの画像サイズが正しくないことを意味します。画像を丸くして作成する場所のcellForRowAtIndexPath関数を共有できますか? –

0

あなたのロジックに

circularImageView.layer.masksToBounds = true 

を追加します。

のドキュメントを見てみましょう:masksToBounds

0
circularImageView.layer.cornerRadius = circularImageView.frame.size.width/2 
circularImageView.layer.masksToBounds = true 
circularImageView.clipsToBounds = true 

+0

私はちょうど試みたが、助けていない。それでも動作しません。 –

+0

** circularImageView.layer.borderColor = UIColor.blackColor()。CGColor circularImageView.layer.borderWidth = 2.0 **で試してみてください。問題が何であるか確認できます。 –

0

は、コンソールログを確認し、このコードを使用してください。あなたが最後の制約(UIViewの-カプセル化されたレイアウト-高さ)気づけば、あなたがいることがわかります。ここ

[LayoutConstraints] Unable to simultaneously satisfy constraints. 
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 


(
    "<NSLayoutConstraint:0x60000009cd90 UIImageView:0x7fe661539400.height == 46 (active)>", 
    "<NSLayoutConstraint:0x60000009ce30 V:|-(5)-[UIImageView:0x7fe661539400] (active, names: '|':UITableViewCellContentView:0x7fe661531100)>", 
    "<NSLayoutConstraint:0x60000009ce80 V:[UIImageView:0x7fe661539400]-(5)-| (active, names: '|':UITableViewCellContentView:0x7fe661531100)>", 
    "<NSLayoutConstraint:0x60000009d6f0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fe661531100.height == 43.5 (active)>" 
) 

- :私は、同様のエラーを得たとき、私の場合、私は、コンソールでこのような何かを得ましたシステムはそれ自身で異なるテーブルビューのセルの高さをとります。ですから最初はあなたのimageViewの高さはあなたの制約で設定したものです(私の場合は46です)。したがって、imageView.bounds.height/2は23になります。しかし、テーブルが表示されている場合、システムはそれとは異なる高さ(43.5)最後の制約で述べた。

私のImageViewのは、セルに(上から下へと5と5)を上部と下部の制約があり、それはにリサイズされますので:43.5から5(上) - 5(下)= 33.5

だから今最初に非円形画像の原因となるサイズ33.5の画像にコーナー半径23を適用しています。 2回目の画像サイズは33.5で、imageView.bounds.height/2 = 33.5/2 = 16.75が得られます。したがって、それは2回目以降も有効です。

イメージの高さの制約とトップとボトムの制約を与えても、テーブルビューにセルの高さが適用されないようにするには、コードでこれを行うことができます。

self.tblDemo.estimatedRowHeight = 70.0 
    self.tblDemo.rowHeight = UITableViewAutomaticDimension 

これは、問題を解決し、円形画像を初めて提供するはずです。