2017-03-06 8 views
1

カスタムセルを作成しました。これにはUIImageViewしかありません。ユーレカ:カスタム行の動的な高さ

import UIKit 
import Eureka 

public class FirebaseImageCell: Cell<UIImage>, CellType{ 

    @IBOutlet weak var customImageView: UIImageView! 

    public override func setup() { 
     super.setup() 
    } 

    public override func update() { 
     super.update() 

     guard let image = row.value else { return } 
     customImageView.image = image 

     guard let cellWidth = UIApplication.shared.keyWindow?.frame.width else { return } 
     height = { cellWidth * (image.size.height/image.size.width) } 
    } 

} 

public final class FirebaseImageRow: Row<FirebaseImageCell>, RowType { 
    required public init(tag: String?) { 
     super.init(tag: tag) 
     cellProvider = CellProvider<FirebaseImageCell>(nibName: "FirebaseImageCell") 
    } 
} 

私はこのような行を作成します:私は、セル内の画像を変更したいいくつかの時点で

let image = UIImage(named: "testImage")! 

let testSection = Section("Test Section") 
    <<< FirebaseImageRow("firebaseImageRow") { row in 
      row.value = image 
     } 
form +++ testSection 

セルは、画像が変更された画像を、フィットする高さを変更する必要がありますセルは画像に合わせて高さを変更する必要があります。ここで私は、画像を変更:

func imageChange() { 

    guard let imageRow = form.rowBy(tag: "firebaseImageRow") as? FirebaseImageRow else { return } 
    let image = UIImage(named: "testImage2")   
    imageRow.value = image 
    imageRow.updateCell() 

} 

フォームが初期化されると、細胞は、右の高さ、「testImage」にfittetを取得しますが、画像が変更された後、高さが同じまま。

どのようにセルの高さを動的に変更できますか?

答えて

1

ない私は、あなたの質問に答えた場合は、多分あなたは私の機能を試すことができてください:

(1)あなたは、セルの高さを覚えてNSMutableDictionaryを作成することができます。高さが変更されたら、tableViewまたはsectionまたはindexPathを再ロードします。

(2)ReactiveCocoaユーザーもこの問題を解決できます。そして、すべての最初の、私はあなたがKVO、MVVMについて知っていることをお勧め、

フック(3)私たちのプロジェクトでは、そのようなアクティブな画像のURLを設定:私たちは簡単にアクティブImageViewののサイズと更新「heightForRowAtIndexPathを得ることができますhttp://example.com/data/img.gif?width=271&height=360

を:" 関数。

​​ enter image description here

関連する問題