ZDFlexLayoutKit 0.3.2

ZDFlexLayoutKit 0.3.2

faimin 维护。



  • faimin

ZDFlexLayoutKit

简介

基于 Yoga 引擎二次开发的为 iOS 使用的盒子布局~

特点

  • 虚拟视图

  • 链式调用

  • 异步计算

  • 自动更新布局

  • 支持 UIScrollView 布局

  • UITableViewCellUICollectionViewCell 高度自动计算

PS:开启自动更新布局后,在布局变更需要更新时需要手动调用 markDirtygone 不需要调用 markDirty,它内部会自动处理

安装

pod 'ZDFlexLayoutKit'

0.1.2 版本开始支持 Swift

支持编译为静态库,但如果想使用 Literal 字面量特性,需要将此 repo 编译为 framework 形式,例如在 podfile 中开启 use_framework! 或其他方式使其以 framework 形式存在

如果它被编译为动态库,其依赖的 yoga 也需要以动态库的形式集成,即动态库不能依赖静态库

使用方法

Swift

avatarImgView.zd.makeFlexLayout {
    $0.position(.absolute)
    $0.width(100%).height(100%)
}
gradientView.zd.makeFlexLayout {
    $0.position(.relative).flexDirection(.column)
    $0.paddingHorizontal(8)
    $0.width(100%)
}
titleLabel.zd.makeFlexLayout { (make) in
    make.marginTop(3.5)
    make.width(100%)
    make.flexShrink(1)
}
// 虚拟视图
let userInfoDiv = ZDFlexLayoutDiv.zd.makeFlexLayout { (make) in
    make.flexDirection(.row)
    make.alignItems(.center)
    make.marginTop(2.5)
    make.marginBottom(6)
}

// 这里需要调用 `addChildren` 函数,因为我们重新构建了视图树
gradientView.addChildren([titleLabel, avatarImgView])
userInfoDiv.addChildren([gradientView])

// 计算布局,以下2种方式皆可,第二种会当你标记为mark之后会在runloop空闲时自动计算布局
//userInfoDiv.calculateLayoutPreservingOrigin(true, dimensionFlexibility: .flexibleHeight)
userInfoDiv.calculateLayout(withAutoRefresh: true, preservingOrigin: false, dimensionFlexibility: .flexibleHeight)

Objective-C

[self zd_makeFlexLayout:^(ZDFlexLayoutMaker * _Nonnull make) {
    make.flexDirection(YGFlexDirectionColumn).flexWrap(YGWrapWrap).alignContent(YGAlignCenter);
}];
[self.iconimageV zd_makeFlexLayout:^(ZDFlexLayoutMaker * _Nonnull make) {
    // 属性设置支持链式调用
    make.marginLeft(YGPointValue(10)).marginTop(YGPointValue(6)).marginBottom(YGPointValue(6)).width(YGPointValue(20)).height(YGPointValue(20));
}];
[self.contentLabel zd_makeFlexLayout:^(ZDFlexLayoutMaker * _Nonnull make) {
    make.marginLeft(YGPointValue(5)).marginRight(YGPointValue(10));
}];
[self calculateLayoutWithAutoRefresh:YES preservingOrigin:YES dimensionFlexibility:ZDDimensionFlexibilityFlexibleHeight];

动态框架设置

pre_install do |installer|
    dynamic_framework = ['ZDFlexLayoutKit','Yoga']
    Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
    installer.pod_targets.each do |pod|
      if dynamic_framework.include?(pod.name)
        def pod.build_type;
          Pod::BuildType.dynamic_framework
        end
      end
    end
end

学习资料