[英]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.