可见区域&逻辑可见
可见区域
// 可见区域
visibleEdgeInsets
// 便捷方法
visibleEdgeInsetsTop, visibleEdgeInsetsLeft, visibleEdgeInsetsBottom, visibleEdgeInsetsRight
- 节点的可见区域,默认是UI元素自己的大小;业务方可以干预: 通过设置一个 UIEdgeInsets 来扩大/缩小可见区域
- 限制: 节点的可见区域,一定是小于等于其父节点的可见区域大小的
- 如下: 设置btn的可见区域top减少10pt, 左侧增加10pt
- 遮挡会影响节点的可见区域(参见
遮挡
章节)
[btn et_build:^(id<EventTracingLogNodeBuilder> _Nonnull builder) {
builder
.visibleEdgeInsetsTop(10)
.visibleEdgeInsetsLeft(-10);
}];
- 图示
逻辑可见
- SDK内部会判断一个元素的可见性:
- 比如是否hidden
- alpha==0
- 是否被添加到window上
- UIView.frame转换到window上之后,是否在屏幕范围内
- 根据父节点/父view等计算的 visibleRect 是否合法
- 是否被子page遮挡 (参见 遮挡 章节)
- 如果一个UI元素正在被展示,由于某些业务场景逻辑的原因,需要当做不可见来处理,则可以设置 logicalVisible == NO
[btn et_build:^(id<EventTracingLogNodeBuilder> _Nonnull builder) {
builder.logicalVisible(NO); // default: YES
}];
3. 依赖view层级的可见区域
- 绝大部分场景,一个节点的可见区域,仅仅通过对比自己跟父node的view即可计算得出
- 如果两个上下节点node之间存在多个非节点view,并且有的view.layer.maskToBounds==YES, 而且上下view之间存在错位,这个时候节点的可见是被裁剪的
- 这个时候有两个选择:
- 自已控制 visibleEdgeInsets
- 使用 ETNodeVisibleRectCalculateStrategyRecursionOnViewTree
- 使用场景: 对于UI布局的时候,上下级的view在frame上存在错位的场景,需要考虑下该使用哪个策略
[btn1 et_build:^(id<EventTracingLogNodeBuilder> _Nonnull builder) {
builder.visibleRectCalculateStrategy(ETNodeVisibleRectCalculateStrategyRecursionOnViewTree);
}];