2016-09-23 11 views
4

問題は簡単です:cellForRowAtIndexpathメソッドを使用してアクセスしようとすると、私のカスタムUITableViewCellのMy @IBOutlet UIImageViewが非表示になります。UIImageViewがXcode8とSwift3で非表示になる

これはSwift 3またはXcode 8のいずれかの問題だと聞いたことがあります(更新後にこの問題が発生したので意味があります)。私はUIImageViewで同じ問題を抱えていて、それが隠されていた理由は、サイクルの早い時期に呼び出していたからです。最新の更新以来、ペン先から@IBOutletにアクセスしようとすると、私はviewDidAppearメソッドでのみ行うことができます。 viewDidLoadメソッドまたはviewWillLoadメソッドで試してみると、アウトレットは非表示になります。この場合

、Iは、単に次の2行のコードを介して円形に正方形からUIImageViewを変更午前:再び

cell.pictureImageView.layer.cornerRadius = cell.pictureImageView.frame.size.width/2; 
cell.pictureImageView.clipsToBounds = true; 

、これはvieDidAppear方法作品。 UITableViewCellのviewDidAppearメソッドはありますか?私はcellForRowAtIndexPathで同じ2本のラインを入れて、画像が消える:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: K.Cell, for: indexPath) as! TimelineTableViewCell 

    //Turn profile picture into a circle 
    cell.pictureImageView.layer.cornerRadius = cell.pictureImageView.frame.size.width/2; 
    cell.pictureImageView.clipsToBounds = true; 

    return cell 
} 

私もカスタムセルのawakeFromNibメソッドでそれを試してみましたが、同じことが起こった...画像が消える:

override func awakeFromNib() { 
    super.awakeFromNib() 
    cell.pictureImageView.layer.cornerRadius = cell.pictureImageView.frame.size.width/2; 
    cell.pictureImageView.clipsToBounds = true; 

} 

ご協力いただきありがとうございます。

乾杯、

C

答えて

2

あなたはあまりにも早くそれを呼び出しています。 pictureImageViewにはまだ知られていません。width あなたはlayoutIfNeededを呼び出す必要があります:

cell.pictureImageView.layoutIfNeeded() 
cell.pictureImageView.layer.cornerRadius = cell.pictureImageView.frame.size.width/2 
cell.pictureImageView.clipsToBounds = true 

円である:

init  
    UIViewController awakeFromNib 
    loadView // your pictureImageView is loaded here 
    UIView awakeFromNib 
    UIViewController viewDidLoad 
    viewWillAppear 
    viewDidAppear // the properties of your pictureImageView are available here 
+0

私は早くそれを呼んでいる知っている、それがポイントです。高さと幅はストーリーボードに設定されていますが、cellForRowでイメージビューをインスタンス化してから自然に呼び出されると、イメージビューのその他のプリセット属性はすべて失われます。私の質問は**サイクル中に*、イメージビューがインスタンス化されるときです。どのような方法なので、私はそれにアクセスすることができます。 –

+0

私の編集を参照してください。多分これはあなたを助けますか? –

+0

layoutIfNeededを呼び出すと、viewDidAppearのように以前のすべてのプロパティを使用することができます –

関連する問題