我制作了一个自定义单元格,应该只有一个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”,但图像更改后高度保持不变。
如何让细胞动态改变它的高度?
答案 0 :(得分:1)
不确定我是否回答了你的问题,也许你可以尝试我的功能:
(1)你可以创建一个NSMutableDictionary来记住单元格的高度。更改高度后,重新加载tableView或section或indexPath。
(2)您还可以使用ReactiveCocoa来解决该问题。首先,我建议你了解KVO,MVVM,Hook
(3)我们的项目设置了活动图像网址:http://example.com/data/img.gif?width=271&height=360
因此我们可以轻松获取活动的imageView的大小并更新&#34; heightForRowAtIndexPath:&#34;功能
答案 1 :(得分:0)
你可以试试这个替代方案:
<<< 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
是用于显示消息
快乐编码