You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UIView-Encapsulated-Layout-Height约束冲突及手势识别器警告求助

解决iOS布局约束冲突与手势识别器警告问题

一、布局约束冲突解决

错误日志里的两个冲突约束:一个是你手动添加的UIView.height == 250,另一个是系统自动生成的UIView-Encapsulated-Layout-Height(值926)。后者是系统根据当前视图容器(比如键盘控制器的View)自动设置的高度约束,优先级为最高级1000,和你手动添加的约束形成冲突。

可行解决方案:

  • 推荐方案(针对键盘控制器):如果你是自定义键盘,无需手动添加高度约束,直接设置控制器的preferredContentSize即可指定键盘高度:
override func viewDidLoad() {
    super.viewDidLoad()
    self.preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: 250)
}
  • 通用视图方案:如果是普通视图,可降低手动约束的优先级,让系统约束在冲突时优先生效(或根据需求调整):
let constraint = NSLayoutConstraint(item: self.view as Any,
                                   attribute: .height,
                                   relatedBy: .equal,
                                   toItem: nil,
                                   attribute: .notAnAttribute,
                                   multiplier: 0.0,
                                   constant: 250)
constraint.priority = UILayoutPriority(999) // 低于系统默认的1000优先级
self.view.addConstraint(constraint)

二、长按手势识别器警告解决

警告提示同一个长按手势识别器被绑定到了多个视图上,原因是你在Storyboard/XIB中把同一个手势对象拖到了多个UIButton上——一个手势识别器只能属于单个视图。

可行解决方案:

  • Storyboard/XIB修复:打开对应界面文件,删除重复绑定的手势识别器,给每个需要长按的按钮分别添加独立的长按手势,各自绑定对应的IBAction(比如一个按钮绑定LongPressDelete,另一个绑定LongPressDelete2)。
  • 代码创建手势(更灵活):通过代码为每个按钮创建独立的手势实例:
override func viewDidLoad() {
    super.viewDidLoad()
    
    // 给第一个删除按钮添加手势
    let longPress1 = UILongPressGestureRecognizer(target: self, action: #selector(LongPressDelete(_:)))
    deleteButton1.addGestureRecognizer(longPress1)
    
    // 给第二个删除按钮添加手势
    let longPress2 = UILongPressGestureRecognizer(target: self, action: #selector(LongPressDelete2(_:)))
    deleteButton2.addGestureRecognizer(longPress2)
}

另外,你的手势代码存在小问题:AudioServicesPlaySystemSound(0x450)写在if语句外,会导致手势状态为began/ended/cancelled时都播放声音。如果只想在长按开始时播放,将该代码移至if sender.state == .began分支内即可。

内容的提问来源于stack exchange,提问作者dennis li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:06:25