Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 

ZDFlexLayout

简介:

扩展YGLayout,增加对虚拟视图、异步计算、UIScrollView自适应的支持,修复由于精度问题导致文字截断问题。

特色:

  • 支持虚拟视图(virtual view

  • 支持链式调用

  • 支持异步(runloop / thread)计算布局

  • 支持利用runloop机制自动更新布局

  • 支持UIScrollView布局

  • 支持UITableView设置rowHeightUITableViewAutomaticDimension后自动计算高度(cell需要继承自 ZDFlexLayoutTableViewCell

PS:开启自动更新布局后,在布局发生改变需要更新时需要手动调用 markDirty 方法( gone 不需要调用 markDirty ,它内部会自己处理)

安装:

pod 'ZDFlexLayoutKit'

默认是包含Objective-CSwift的混编pod,如果只是用于纯OC工程,可以仅引用OC版本

0.1.2 开始支持 Swift

pod 'ZDFlexLayoutKit', :subspecs => ['OCMaker']

支持编译为静态库,但如果想使用Literal字面量特性,需要把这个repo编译为framework的形式,比如在podfile中开启use_framework!或者其他方式让它以动态库的形式存在

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

使用:

Swift

avatarImgView.zds.makeFlexLayout {
    $0.position(.absolute)
    $0.width(100%)
    $0.height(100%)
}
gradientView.zds.makeFlexLayout {
    $0.position(.relative).flexDirection(.column)
    $0.paddingHorizontal(8)
    $0.width(100%)
}
titleLabel.zds.makeFlexLayout { (make) in
    make.marginTop(3.5)
    make.width(100%)
    make.flexShrink(1)
}
// 虚拟视图
let userInfoDiv = ZDFlexLayoutDiv.zds.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.isEnabled(YES);
    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];

学习资料:

About

为YGLayout增加对虚拟视图的支持,减少渲染图层

Topics

Resources

License

Packages

No packages published