2016-10-28 7 views
0

テーブルビューのセルにUIImageViewを追加し、セルのviewWithTagメソッドでアクセスしています。私はそれをセルのコンテンツビューに追加してからアプリを実行するだけで、画像ビューはそこにあり、間違いはありません。しかし、その後、私はそれ丸いイメージ図にするために、そのイメージビューに数行のコードを適用したい:UITableViewCellのUIImageViewは、視野をスクロールした後にのみ表示されますか?

myImageView.layer.cornerRadius = myImageView.layer.frame.size.width/2 
myImageView.clipsToBounds = true 
myImageView.layer.borderColor = UIColor.black.cgColor 
myImageView.layer.borderWidth = 0.5 

それは正常に見えるが、問題は、後に、私はこれらのコード行を追加することであるUIImageView doesnの私はテーブルビューをスクロールダウンし、再びスクロールしてセルを再び表示させるまで表示されません。つまり、基本的には、画像ビューは、セルが表示されている第2の時間からのみロードされることを意味します。セルをテーブルビューで最初に表示する必要があるときに、UIImageViewが既に表示されていることを確認するにはどうすればよいですか?

+0

あなたは、コードのこれらの行を追加したのですか? 'cellForItem atIndex'デリゲートメソッドで? – MikeG

+0

@MikeG 'cellForRowAtIndexPath'それはあなたが意味するものなら、はい。 –

+0

はい、スウィフト3で修正されました。混乱して申し訳ありません。ちょうどこのような問題があることを覚えていますが、私はそれをどのように解決したのか正確には思い出せません。あなたはテーブルビュークラスの残りのコードを追加してください。 – MikeG

答えて

0

があなたのテーブルビューのセルのサブクラスを作成し、ストーリーボードにそれを設定します。

class MyTableViewCell: UITableViewCell { 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     // your border and corner radius settings 
    } 
} 

問題は、セルのライフサイクルの間違った時間の設定これらのプロパティをしていることです。このアプローチでは、適切に動作します。

更新:ストーリーボードでIBInspectablesを使用して、属性インスペクタでこれらを設定する方法もあります。以下の添付イメージとコードを参照してください。

enter image description here

extension UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
    get { 
     return layer.cornerRadius 
    } 
    set { 
     layer.cornerRadius = newValue 
     layer.masksToBounds = newValue > 0 
    } 
    } 

    @IBInspectable var borderWidth: CGFloat { 
    get { 
     return layer.borderWidth 
    } 
    set { 
     layer.borderWidth = newValue 
    } 
    } 

    @IBInspectable var borderColor: UIColor { 
    get { 
     guard let borderc = layer.borderColor else { 
      return UIColor() 
     } 
     return UIColor(CGColor: borderc) 
    } 
    set { 
     layer.borderColor = newValue.CGColor 
    } 
    } 
} 
+0

'layoutSubviews()'を手動で呼び出す方法はありませんか?私は少なくとも6つのサブビューを含む8つのプロトタイプセルを持っているので、私はテーブルビュー全体を最初から再構築して、ちょうどそうであるように見えるようにいくつかの画像ビューを得ることが過度にいかないかを想像することができます。 –

+0

layoutSubviews()は自動的に呼び出されるため、残念です。これは単に境界と半径をレイアウトする方法です。これを手動で呼び出す必要がある場合は、セルにUIを設定した後でこれを行うことをお勧めします。したがって、cellForIndexPathデリゲートメソッドでは、セルを返す前に単純に次のようにします。cell.layoutSubviews() – Daniel

+0

両方の候補を試してみましたが、どちらもうまくいきませんでした。私も 'cellWillDisplayAtIndexPath'で' layoutSubviews() 'を呼び出そうとしましたが、何の効果もありませんでした。 'cellForRowAtIndexPath'で提供されているデータによれば、ラベルテキストやそのような設定をすぐに見ることはできませんが、画像ビューデータは後で設定する必要があります。コードが表示されない理由がコード自体にあり、コードが実行された時点ではない限り、意味をなさない。画像ビューのように、セルのラベル/ボタン/スライダなどのサブビューもありませんか? –

関連する問題