Swift Compositional Layout中header的contentInsets.top不生效问题
你已设置的supplementariesFollowContentInsets = false已经排除了补充视图继承section contentInsets的影响,该问题通常是由以下几个布局规则冲突导致:
- 补充视图尺寸设置限制了高度撑开逻辑
给NSCollectionLayoutBoundarySupplementaryItem配置的尺寸为固定高度(absolute类型),或估算高度(estimated类型)刚好等于内容本身高度时,contentInsets的top、bottom值需要叠加到内容高度上才会正常展示,如果没有预留对应的高度空间,系统会自动压缩上下内边距,仅保留宽度足够支撑的水平方向内边距生效。
解决方法:将header的尺寸高度设置为estimated类型,且给定一个比预期内容高度更小的基准值,或者直接在原有配置的header高度基础上,叠加你需要设置的top+bottom insets总数值。 extendsBoundary属性优先级高于补充视图自身的contentInsets
你配置的extendsBoundary = true会让header的布局范围延伸到section的contentInsets外侧,此时系统会以section的全局布局边界为基准计算header的位置,header自身的上下contentInsets不会改变自身的布局位置,仅水平方向不受section边界延伸的影响,可以正常生效。
解决方法:如果不需要header突破section的内边距展示,可将extendsBoundary设为false,或者通过修改header的offset属性替代top/bottom contentInsets调整垂直方向的位置。- 吸顶配置冲突
如果你给header设置了pinToVisibleBounds = true开启吸顶效果,系统为了保证吸顶逻辑的一致性,会主动忽略补充视图自身的上下contentInsets配置,仅保留水平方向的内边距生效。
解决方法:不在布局配置中设置header的上下contentInsets,改为在自定义header视图内部添加子视图时直接设置上下内边距。 - 自定义header内部约束冲突
若自定义header的子视图上下约束直接绑定到header的topAnchor、bottomAnchor,没有预留内边距空间,就算布局配置的contentInsets生效,也会被子视图的约束撑满,看起来像是内边距未生效。
解决方法:检查header内部的布局约束,将子视图的上下约束改为和header的layoutMarginsGuide绑定,或者手动添加对应数值的上下边距约束。
内容的提问来源于stack exchange,提问作者MWloczko
相关产品推荐
相关产品推荐

