POViewFrameBuilder 的目的是提供一个简单的方法,以编程方式排列 UIViews,同时保持代码的语义和可读性。它允许您通过链式一系列可读的布局方法来修改视图的 frame。它减少了 frame 计算代码的数量,并保持布局意图明确。这是您平均布局Subviews、动画块等的实用工具。
它绝对不完整,而是包含了一些我在各种场合下意外需要的方法。欢迎反馈和拉取请求。
以下两个示例简要介绍了如何使用 POViewFrameBuilder。只需将 UIView+POViewFrameBuilder.h
类别包含到您想使用它的位置,然后您可以通过访问 po_frameBuilder
便利属性来为任何 UIView
子类实例化 frame 建造器。
调整视图大小
[view.po_frameBuilder setWidth:100.0f height:40.0f];
将视图移动到其父视图中心
[view.po_frameBuilder centerInSuperview];
您可以将这些方法结合使用,根据您的喜好
[[view.po_frameBuilder setWidth:100.0f height:40.0f] centerHorizontallyInSuperview];
DemoApp 项目展示了如何在使用动画块中使用 POViewFrameBuilder。需要注意的是,默认情况下,automaticallyCommitChanges
属性设置为 YES
。这意味着在链式中的每个修改方法之后都会提交 frame 更改。然而,在动画中多次更改 frame 不起作用,并且视图会跳来跳去。为了避免这种情况,通过调用 disableAutoCommit
开始方法链,并通过调用 commit
方法完成一系列更改,该方法将更新视图的 frame。
[[[[view.po_frameBuilder disableAutoCommit] setWidth:100.0f height:40.0f] centerHorizontallyInSuperview] commit];
感谢 @rsobik,现在也有一种更简洁、更易于阅读的方式来创建这些事务
[self.squareView.po_frameBuilder update:^(POViewFrameBuilder *builder) {
[builder setWidth:100.0f height:40.0f];
[builder centerHorizontallyInSuperview];
}];