如何编程设置指定距离的布局约束 解决equalTo上下文类型报错
问题根因
代码存在两个核心问题:
- 约束API调用语法错误:
NSLayoutAnchor创建约束的方法是constraint(equalTo:constant:),属于带参数的实例方法,你漏写了方法的括号传参格式,错误地用属性链式访问的写法写了constraint.equalTo,编译器无法识别这种非法调用,才抛出Reference to member 'equalTo' cannot be resolved without a contextual type的报错。 - 约束逻辑和常量值不匹配:你需要实现的效果是
SafeArea.bottom = button.bottom + 28,即按钮底部在安全区底部上方28pt的位置,你代码里写的constant: 66不仅数值不对,方向也反了,会把按钮放到安全区下方66pt的位置,直接超出屏幕可视区域。
修复后代码
btnAddRecord.translatesAutoresizingMaskIntoConstraints = false // 修正方法调用语法,同时匹配目标约束的间距要求 btnAddRecord.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: -28).isActive = true
注意要点
- iOS视图坐标系原点在左上角,y轴向下数值递增:当两个同方向锚点做约束时,如果想要子视图的锚点位置在参考锚点的上方/左侧,常量值需要传负值;如果在下方/右侧,常量值传正值。
- 所有基于Anchor的AutoLayout约束创建,都要遵循
锚点.constraint(equalTo: 参考锚点, constant: 间距值)的方法调用格式,不要漏写方法括号。
内容的提问来源于stack exchange,提问作者wepowf
相关产品推荐
相关产品推荐

