前提・実現したいこと
SwiftのtableViewにおいて画像の大きさを一定にする方法について質問します。
該当のソースコード
swift
1 // Cellに値を設定するdatasourceメソッド 2 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 3 // 今回表示を行う、Cellオブジェクト(1行)を取得する 4 let cell = tableView.dequeueReusableCell(withIdentifier: "okashiCell", for: indexPath) 5 // お菓子のタイトル設定 6 cell.textLabel?.text = okashiList[indexPath.row].name 7 // お菓子画像を取得 8 if let imageData = try? Data(contentsOf: okashiList[indexPath.row].image) { 9 // 正常に取得できた場合は、UIImageで画像オブジェクトを生成して、Cellにお菓子画像を設定 10 cell.imageView?.image = UIImage(data: imageData) 11 12 // サイズを定義する 13 let Resize:CGSize = CGSize.init(width: 80, height: 80) 14 15 //UIImageを指定のサイズにリサイズ 16 _ = cell.imageView?.image!.resize(size: Resize) 17 18 } 19 20 // 設定済みのCellオブジェクトを画面に反映 21 return cell 22 23 } 24 25//UIImage リサイズ 26extension UIImage { 27 func resize(size _size: CGSize) -> UIImage? { 28 let widthRatio = _size.width / size.width 29 let heightRatio = _size.height / size.height 30 let ratio = widthRatio < heightRatio ? widthRatio : heightRatio 31 32 let resizedSize = CGSize(width: size.width * ratio, height: size.height * ratio) 33 34 UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0) // 変更 35 draw(in: CGRect(origin: .zero, size: resizedSize)) 36 let resizedImage = UIGraphicsGetImageFromCurrentImageContext() 37 UIGraphicsEndImageContext() 38 39 return resizedImage 40 } 41}
試したこと
写真のように画像の大きさがバラバラなので、
これらの画像をリサイズして一定にするコードを書いて実行しても変わりません。
わかる方よろしくお願いいたします。
画像をリサイズするのではなく、UIImageView のサイズを固定して Content Mode を Aspect Fit とかにすべきかと。
Content Mode を Aspect Fit とかにするというのは
cell.imageView!.contentMode = .scaleAspectFit
を記述するということなのでしょうか。
もしそうでしたら、
// サイズを定義する
let Resize:CGSize = CGSize.init(width: 80, height: 80)
//UIImageを指定のサイズにリサイズ
_ = cell.imageView?.image!.resize(size: Resize)
ではなく代わりに
cell.imageView!.contentMode = .scaleAspectFit
の一文を記述するということでしょうか。
よろしくお願いいたします。
あなたの回答
tips
プレビュー