RxDelegateCells 0.1.0

RxDelegateCells 0.1.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2016年9月
SPM支持 SPM

Suyeol Jeon 维护。



 
依赖
RxCocoa~> 2.5
RxSwift~> 2.5
 

  • Suyeol Jeon

RxDelegateCells

RxSwift 中的 UITableView Cell 高度和 UICollectionView Cell 大小。

原因

如果您正在使用 RxSwift 与 UITableViewUICollectionView 一起,由于 TableView 需要同步计算 cell 高度,但 Observable 是异步发出值,因此很难使用 Observable 计算 cell 大小。

例如,假设我们正在使用 MVVM 模式,并且有一个 ViewModel 公开了一个 message,其值为 Driver。我们需要将实际的消息值作为 String 来计算 cell 高度。然而,由于 message 是异步发出值,我们无法同步访问实际值。

struct MyCellModel {
    let message: Driver<String>
}

func tableView(tableView: UITableView, heightForRowAtIndexPath: NSIndexPath) -> CGFloat {
    let cellViewModel = self.dataSource.itemAtIndexPath(indexPath)

    cellModel.message // (1) This is `Driver<String>`
        .map { message -> CGFloat in
            let size = CGSize(width: tableView.width - 20, height: .max)
            let options: NSStringDrawingOptions = [.UsesLineFragmentOrigin, .UsesFontLeading]
            let attributes = [NSFontAttributeName: MyCell.Font.messageLabel]
            let rect = message.boundingRectWithSize(size, options: options, attributes: attributes, context: nil)
            return ceil(rect.height) + 20 // (2) We want return this value (async)
        }

    return 40 // (3) But we have to return actual value here, synchronously :(
}

概述

RxDelegateCells 允许您使用 Driver<CGFloat> 作为 UITableView cell 的高度以及使用 Driver<CGSize> 作为 UICollectionView cell 的大小。

以下代码将 cell 高度设置为 40,80 和 120。

Driver.just([[.just(40), .just(80), .just(120)]])
    .drive(self.tableView.rx_cellHeightWithDelegate(delegate))
    .addDisposableTo(self.disposeBag)

rxdelegatecells

您可以在这里找到实际的示例。

安装

  • 适用于 iOS 8+ 项目且使用 CocoaPods

    pod 'RxDelegateCells', '~> 0.1'
  • 适用于 iOS 8+ 项目且使用 Carthage

    github "devxoul/RxDelegateCells" ~> 0.1
    
  • 适用于 iOS 7 项目且使用 CocoaSeeds

    github 'devxoul/RxDelegateCells', '0.1.0', :files => 'Sources/**/*.swift'
  • 使用 Swift 包管理器:

    import PackageDescription
    
    let package = Package(
        name: "MyAwesomeApp",
        dependencies: [
            .Package(url: "https://github.com/devxoul/RxDelegateCells", "0.1.0"),
        ]
    )

许可证

RxDelegateCells 在 MIT 许可证下。有关更多信息,请参阅LICENSE 文件。