基于Pulley实现类Apple Maps侧边栏菜单的约束调整咨询
我之前也碰到过Pulley组件类似的抽屉不显示问题,大概率是约束配置没跟上Pulley的核心逻辑要求,尤其是地图和抽屉控制器的层级与约束设置。下面是我整理的几个关键调整点,你可以逐一排查:
确认Pulley的层级结构正确性
首先要保证PulleyViewController是你的核心容器控制器——要么作为根控制器,要么正确嵌入导航栈中。绝对不能直接把地图控制器和抽屉控制器单独添加到窗口,必须通过Pulley提供的setDrawerContentViewController(_:)和setPrimaryContentViewController(_:)方法来绑定主内容(地图)和抽屉视图,这是Pulley管理视图交互的基础。主内容(地图)的约束要“完全贴合”
地图控制器的view必须和Pulley的主内容容器视图四边完全贴合,不要给它设置固定的width/height约束,也不要添加会限制水平/垂直偏移的约束。只需要给地图view设置leading、trailing、top、bottom四个方向等于容器视图的对应锚点,优先级保持默认的required即可——Pulley会根据抽屉的位置自动调整主内容的偏移,不需要你手动干预。抽屉视图的约束核心:别锁死垂直位置
抽屉的顶部约束是关键,绝对不能给它设置固定的top锚点或者centerY约束,否则会和Pulley的动画逻辑冲突:- 给抽屉view设置明确的
height约束(比如300pt),或者让它根据内容自适应高度(设置bottom锚点到自身view的bottom,top锚点留空); - 抽屉的
leading、trailing必须和Pulley的抽屉容器视图完全贴合,不能有左右偏移,否则可能被隐藏在屏幕外侧; - 如果用代码写Auto Layout,确保没有添加任何会固定抽屉垂直位置的约束,把垂直方向的控制权完全交给Pulley。
- 给抽屉view设置明确的
排查隐性约束冲突
虽然控制台没报错,但可能存在隐性的约束冲突。你可以打开Xcode的Debug View Hierarchy,选中Pulley的容器视图,查看主内容和抽屉的约束有没有红色警告。有时候第三方库的约束和你的自定义约束会悄悄冲突,导致视图被压缩到0高度或者移出屏幕可视范围。验证抽屉的初始位置配置
检查你有没有设置正确的抽屉初始位置,比如:pulleyViewController.drawerPosition = .partiallyRevealed如果误设成
.closed,抽屉会完全隐藏,看起来就像没显示。另外,确保allowedDrawerPositions包含你需要的显示位置,比如[.closed, .partiallyRevealed, .open],避免因为权限限制导致抽屉无法展开。用最小化案例排查问题
要是上面的步骤都排查过还是不行,建议新建一个空项目,只添加Pulley组件,设置最简单的主内容(比如一个红色view)和抽屉(一个蓝色view),看能不能正常显示。如果能正常工作,再逐步把你的地图控制器和业务逻辑移过去,这样能快速定位是哪个部分的约束或代码干扰了Pulley的正常运行。
内容的提问来源于stack exchange,提问作者Usman Yousaf

