簡體   English   中英

Eureka:自定義行的動態高度

[英]Eureka: Dynamic height of custom row

我制作了一個自定義單元格,它應該只有一個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()

}

當表單初始化時,單元格獲得正確的高度,fittet 為“testImage”,但在圖像更改后高度保持不變。

我怎樣才能讓單元格動態改變它的高度?

不確定我是否回答了您的問題,也許您可​​以嘗試我的功能:

(1)您可以創建一個 NSMutableDictionary 來記住單元格的高度。 當高度改變時,重新加載 tableView 或 section 或 indexPath。

(2) 你也可以使用 ReactiveCocoa 來解決這個問題。 首先,我建議你了解 KVO、MVVM、Hook

(3) 我們的項目設置活動圖片網址如下: http : //example.com/data/img.gif?width=271&height=360

所以我們可以輕松獲取活動圖像視圖的大小並更新“heightForRowAtIndexPath:”函數。

在此處輸入圖片說明 在此處輸入圖片說明

你可以試試這個替代方案:

<<< FormTextRow(tag: "phone", title: "Teléfono", isPhone: true).cellUpdate({ [weak self] cell, row in
         row.add(rule: RuleRequired(msg: "Debes indicar tu teléfono", id: "phone required"))
         row.add(rule: RuleMinLength(minLength: Locale.current.regionCode ?? "" == "CL" ? 6 : 10, msg: "Debes ingresar un número celular de 8 dígitos", id: "cell invalid"))
         if (self?.params["phone"] as? String ?? "") != row.value ?? "" {
             self?.params["phone"] = row.value ?? ""
             self?.updateParams?(self?.params ?? [:])
             cell.setupErrorMessage()
             self?.tableView.reloadData()
         }
     })

注意: params是完成表單的參數, setupErrorMessage是渲染方法, reloadData是為了出現消息的目的

快樂編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM