Eureka:自定义行的动态高度
Posted
技术标签:
【中文标题】Eureka:自定义行的动态高度【英文标题】:Eureka: Dynamic height of custom row 【发布时间】:2017-03-06 22:45:36 【问题描述】:我制作了一个自定义单元格,它应该只有一个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”,但图像更改后高度保持不变。
如何让单元格动态改变高度?
【问题讨论】:
你有没有解决这个问题? 【参考方案1】:不确定我是否回答了你的问题,也许你可以试试我的功能:
(1)您可以创建一个 NSMutableDictionary 来记住单元格的高度。当高度改变时,重新加载 tableView 或 section 或 indexPath。
(2) 你也可以使用 ReactiveCocoa 来解决这个问题。首先,我建议你了解KVO、MVVM、Hook
(3) 我们的项目设置活动图片的url是这样的:http://example.com/data/img.gif?width=271&height=360
这样我们就可以轻松获取活动 imageView 的大小并更新“heightForRowAtIndexPath:”函数。
【讨论】:
【参考方案2】:你可以试试那个替代方案:
<<< 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
是用于显示消息的目的
愉快的编码
【讨论】:
以上是关于Eureka:自定义行的动态高度的主要内容,如果未能解决你的问题,请参考以下文章