【问题标题】:Unable to simultaneously satisfy constraints for view controller无法同时满足视图控制器的约束
【发布时间】:2018-04-11 08:55:55
【问题描述】:

我正在加载一个视图控制器,它有一个可以采用不同大小的视图。大小在“viewDidLayoutSubviews”中设置,可能与发送到视图的参数不同。

我在视图中使用自动布局,它由 2 个彼此下方的标签(标题 + 错误)、一个表格视图和两个并排的按钮(确认 + 取消)组成。

视图加载完美,但我仍然收到此消息:

* Xcode 对约束大喊大叫,然后指定哪一个似乎是问题*

( "<_UILayoutSupportConstraint:0x604000281040 _UILayoutGuide:0x7f84ce652de0.height == 0 (active)>", "<_UILayoutSupportConstraint:0x604000289830 _UILayoutGuide:0x7f84ce652de0.bottom == UIView:0x7f84ce66fea0.bottom (active)>", "<NSLayoutConstraint:0x60000048b630 UIButton:0x7f84ce4b3c60'Continuer'.height == 60 (active)>", "<NSLayoutConstraint:0x6040002963a0 UILabel:0x7f84ce670bd0'Sexe'.top == UILayoutGuide:0x6040001b2520'UIViewSafeAreaLayoutGuide'.top + 5 (active)>", "<NSLayoutConstraint:0x6040002967b0 V:[UILabel:0x7f84ce670bd0'Sexe']-(0)-[UILabel:0x7f84ce43a770'Error'] (active)>", "<NSLayoutConstraint:0x60400028c4e0 V:[UILabel:0x7f84ce43a770'Error']-(5)-[UITableView:0x7f84ce850000] (active)>", "<NSLayoutConstraint:0x60400028c3a0 V:[UITableView:0x7f84ce850000]-(0)-[UIButton:0x7f84ce4b3c60'Continuer'] (active)>", "<NSLayoutConstraint:0x60400028f0a0 V:[UIButton:0x7f84ce4b3c60'Continuer']-(0)-[_UILayoutGuide:0x7f84ce652de0] (active)>", "<NSLayoutConstraint:0x60000048cda0 'UIView-Encapsulated-Layout-Height' UIView:0x7f84ce66fea0.height == 0 (active)>", "<NSLayoutConstraint:0x604000296670 'UIViewSafeAreaLayoutGuide-top' V:|-(0)-[UILayoutGuide:0x6040001b2520'UIViewSafeAreaLayoutGuide'] (active, names: '|':UIView:0x7f84ce66fea0 )>" )

知道是什么限制给我带来了这样的麻烦吗? (我可以发布完整的 Xcode 消息,但我不想发垃圾邮件。)

【问题讨论】:

  • 发布完整的 Xcode 消息 :)
  • 首先,从这个日志你应该可以看出问题出在纵轴上。其次,Xcode 还指定它决定“打破”哪些约束。该消息还包含您可以调试哪个异常的提示,然后如果需要手动调试,您可以从日志中查找如何通过引用查找视图。请注意,被布局引擎“破坏”的约束不一定是导致问题的原因,而不是删除它,您应该分析垂直轴上的所有约束。
  • 我有这两个:将尝试通过打破约束来恢复 <0x60000048b630 uibutton:0x7f84ce4b3c60><0x60400028c4e0 v:>

标签: ios xcode storyboard constraints


【解决方案1】:

我的问题是我在实例化视图后在“viewDidLayoutSubviews”中设置了视图的高度。 我正在使用“Presentr”库轻松实例化视图。

我的问题与情节提要中的约束无关。 我设法通过在使用 Presentr 呈现之前指定视图的高度来解决问题。 为此,我做了一个协议,强制我的控制器有一个“getHeight”函数来获取它的高度,让我可以做类似的事情

let customType = PresentationType.custom(width: .custom(size: Float(self.view.frame.width)), height: .custom(size: editProfileVC.getHeight()), center: .center)

您可以在这里看到,对于高度,我使用的是“editProfileVC.getHeight()”

我希望它也可以帮助其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多