2016-03-19 8 views
0

私はUIViewControllerUITableView、私の独自のカスタムセルクラスで定義されている1つのプロトタイプセルを持っています。私は、トップと末尾の余白の制約で、右上隅にあるUIImageViewを持っているだけでなく、一定の幅と高さ:私はプログラムを実行すると、問題は、TableViewカスタムUITableViewCellでUIImageVIewを作成するには?

In Interface Builder

を作成されているが、 、このサイト上でいくつかの同様の質問を調査した結果

At runtime

私は結論に来ている:imageViewは特大です

セルのimageViewは、 イメージを割り当てたときにのみ表示され、サイズが変更されます。

私はすでにカスタムセルクラスに次のコードを試してみた、とcellForRowAtIndexPath機能:

cell.imageView?.frame = CGRectMake(300, 52, 292, 136) 
cell.imageView?.clipsToBounds = true 
cell.contentView.addSubview(cell.imageView!) 

私が何かをしないのですか、私は「サイズにimageViewを得るために何をしますかその制約がありましたか?

ありがとうございます!

+0

はいあなたは、セルの中に制約を追加する必要はビューとプログラム的ImageViewのフレームを設定する必要はありませんが含まれています。 例:http://postimg.org/image/utqzbrjn1/ –

+0

ストーリーボードでtableviewCellのスクリーンショットを教えてください。あなたが私たちにあなたの制約を示すなら、それは役に立ちます。広告は 'cellForRowAtIndexPath'の下に完全なコードを表示するのもいいでしょう。 –

答えて

0

注目すべきは、固定幅と高さの制約はどのような値ですか? View Controllerのサイズが異なるため、インターフェースビルダーとデバイスのスクリーンショットの違いを理解するのは難しいです。

私の提案ではなく、一定の幅と高さの制約を離れてやって、そして次のようになります。

ピン•イメージビューの下部にセルの底に - これは、高さだ画像ビューを提供します。

•画像ビューにアスペクト比の制約を追加する - 画像ビューの幅を高さに基づいて指定します。

これは、セルの高さを変更しても、イメージビューが常にセルの内側に収まることを意味します。

プロトタイプセルとUITableViewCellサブクラスを使用している場合の功績 - 私はこのメソッドに完全に同意します!

+0

マシュー!私はあなたの提案を試みましたが、それは私に同じ結果を与えています。幅は292で、高さは136です。私はこのデバイスがiPhone 6であると言わざるを得ない。imageViewは唯一の問題であり、その制約が適用されていないためと思われる。 – vblaga

+0

cellForRowAtIndexPath:メソッドと同様に、テーブルビュー自体の設定の周りにさらにコードを提供できますか?それから、あなたがしてはいけないことをしているのか、あなたがしなければならないことを忘れているのかを見ることができるかもしれません! –

1

UIViewのは、属性contentModeた - ScaleToFillとしてそれを定義しよう:私はあなたがカスタムセルクラスを使用して同意するものの

self.someImage.contentMode = .ScaleToFill 
0

あなたのコードでは、漠然としたようです。これは、設定されたすべてのイメージをダウンロードしようとするもので、ダウンロードできない場合は、イメージを資産に保存されているイメージプレースホルダに置き換えます。すべての画像がロードされると、同じサイズになります。

これを機能させるには、次の操作を行います。ここにカスタムクラスがあります。あなたのViewController

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet weak var tableView: UITableView! 

    var somePics = ["http://www.something.com/pic1.jpg","http://www.something.net/pic2.jpg","http://www.something.com/pic3.jpg","http://www.something.com/pic4.jpg","http://www.something.net/pic5.jpg"] 

    var someTitles = ["Picture 1", "Picture 2", "Picture 3", "Picture 4", "Picture 5"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.delegate = self 
     tableView.dataSource = self 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     if let cell = tableView.dequeueReusableCellWithIdentifier("SomeCell") as? SomeCell { 

      var img: UIImage! 

      let url = NSURL(string: somePics[indexPath.row])! 

      if let data = NSData(contentsOfURL: url) { 
       img = UIImage(data: data) 
      }else { 
       img = UIImage(named: "somePlaceholderpic") 
      } 

      cell.configureCell(img, text: someTitles[indexPath.row]) 

      return cell 

     } else { 

      return SomeCell() 

     } 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return somePics.count 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

希望に続いて

class SomeCell: UITableViewCell { 

    @IBOutlet weak var imgMain: UIImageView! 
    @IBOutlet weak var lblMain: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
     imgMain.layer.cornerRadius = 5.0 
     imgMain.clipsToBounds = true 
    } 

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

     // Configure the view for the selected state 
    } 

    func configureCell(image: UIImage, text: String){ 
     imgMain.image = image 
     lblMain.text = text 
    } 

} 

このことができます。 :)

1

助けてくれてありがとう!

別名で作成したIB Outletではなく、カスタムセルの汎用名imageView?を参照して馬鹿馬鹿しくしました。

間違っ:

cell.imageView?.image = UIImage(named: "whatever name") 

右:

cell.dogImageView.image = UIImage(named: "labrador") 
関連する問題