2016-07-20 6 views
0

私はUITableViewControllerをストーリーボードではなくXIBで使用しようとしており、デフォルトのスタイルはUITableViewCellStyleDefaultです。私はimageViewcornerRadiusimageViewの幅/ 2に設定したいと思っていますが、cellForRowAtIndexPath()の間にはimageViewは0,0,0,0です。cellForRowAtIndexPathの間にimageViewのフレームサイズを取得するにはどうすればよいですか?

フレームがサブビューに追加されるまで、更新されないことがわかりました。

imageView.frame.size.widthを入手するにはどうすればよいですか? UITableViewが正しく行を示しているが、cornerRadiusは、あなたの目標を達成するために0

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("ContactCell", forIndexPath: indexPath) 

    // Set Image 
    cell.imageView?.image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 

    // FOLLOWING DOESNT WORK imageView is 0,0,0,0 
    cell.imageView?.layer.cornerRadius = cell.imageView!.frame.size.width/2 

    cell.imageView?.clipsToBounds = true 
    cell.imageView?.layer.masksToBounds = true 

    // Set Label 
    let name:String = contactsArray![indexPath.row] as! String 
    cell.textLabel!.text = name 

    return cell 
} 
+0

あなたのimageViewにプレースホルダ画像または高さ/幅の制約を指定しましたか? – Happiehappie

+0

いいえ、これはXIBにあるので、私はプロトタイプのセルを使用することはできませんし、ImもカスタムセルXIBを使用していません。私がしたのは、viewDidLoad:tableView.registerClass(UITableViewCell.self、forCellReuseIdentifier: "ContactCell")のデフォルトのUITableViewCellを登録することでした。 XIBで何もできませんでした。なぜなら、それはストーリーボードではないXIBなので、私はそれができないからです。私はおそらく自分のUITableViewCellを作成し、いくつかのデフォルトを与える必要があります。 – KevinS

+1

私は 'UIImage.init(imageLiteral:" \(indexPath.row).jpg ")'を使用したことは一度もありません。私はいつも 'UIImage(name:" \(indexPath.row).jpg ")'を使用します。 –

答えて

1

可能な方法の1つである:
サブクラスのUITableViewCellを、そしてlayoutSubviews()上書き:文句を言わないレイアウト行の下

override func layoutSubviews() { 
    super.layoutSubviews() 
    self.imageView?.layer.cornerRadius = cell.imageView!.frame.size.width/2 
} 
+0

ありがとう、これがうまくいきました!カスタムUITableViewCell .xibファイルと.swiftファイルを作成しました。私はイメージビューを持っているデフォルトのUITableViewCellクラスを使用したいと思っていました – KevinS

2

を任意のUIはまだありませんので、現時点ではどんな種類のディメンションも取得できません。

cell.imageView?.image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 

一つの方法画像サイズ

let image = UIImage.init(imageLiteral: "\(indexPath.row).jpg") 
cell.imageView?.image = image 
let size = image.size 

はその後、このサイズで残りを行い得ることです。

画像が大きすぎる場合は、実際の画像のサイズに応じて画像が読み込まれるため、画像のサイズを変更する方法を検討しなければならない場合があります。

+0

はい、これはどのようなものです、カスタムXIBセルを作成してデフォルト値を設定しようとしていますが、AppleのデフォルトのUITableViewCellを使用してこれを最小限に抑えることができると思っていましたが、おそらくNOです。 – KevinS

関連する問題