ios - 如何找出哪个约束不起作用或产生问题

标签 ios swift iphone xcode ibdesignable

我已经为 UITableView 单元格创建了自定义 View 。当应用程序运行并且 UITableView 被填充时,我收到太多与设计相关的警告。让我快速分享我正在获得的设计日志

    [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x600000a8c530 H:[UIView:0x7fcc025a6390]-(1)-|   (active, names: '|':UIView:0x7fcc025a5dc0 )>",
    "<NSLayoutConstraint:0x600000a8c620 H:|-(1)-[UIView:0x7fcc025a6390]   (active, names: '|':UIView:0x7fcc025a5dc0 )>",
    "<NSLayoutConstraint:0x600000a8cb20 H:|-(0)-[UIView:0x7fcc025a5dc0]   (active, names: '|':UITableViewCellContentView:0x7fcc025a58a0 )>",
    "<NSLayoutConstraint:0x600000a8cbc0 H:[UIView:0x7fcc025a5dc0]-(0)-|   (active, names: '|':UITableViewCellContentView:0x7fcc025a58a0 )>",
    "<NSLayoutConstraint:0x600000a8d5c0 'UIView-Encapsulated-Layout-Width' UITableViewCellContentView:0x7fcc025a58a0.width == 0   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000a8c530 H:[UIView:0x7fcc025a6390]-(1)-|   (active, names: '|':UIView:0x7fcc025a5dc0 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2020-07-16 12:52:06.760595+0500 NeverEndingApp[4395:106090] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x600000a8c1c0 V:[UIView:0x7fcc025a6ad0]-(0)-|   (active, names: '|':UIView:0x7fcc025a6390 )>",
    "<NSLayoutConstraint:0x600000a8c260 V:|-(0)-[UIView:0x7fcc025a6ad0]   (active, names: '|':UIView:0x7fcc025a6390 )>",
    "<NSLayoutConstraint:0x600000a8c580 V:|-(1)-[UIView:0x7fcc025a6390]   (active, names: '|':UIView:0x7fcc025a5dc0 )>",
    "<NSLayoutConstraint:0x600000a8c5d0 V:[UIView:0x7fcc025a6390]-(1)-|   (active, names: '|':UIView:0x7fcc025a5dc0 )>",
    "<NSLayoutConstraint:0x600000a8cad0 V:|-(0)-[UIView:0x7fcc025a5dc0]   (active, names: '|':UITableViewCellContentView:0x7fcc025a58a0 )>",
    "<NSLayoutConstraint:0x600000a8cb70 V:[UIView:0x7fcc025a5dc0]-(0)-|   (active, names: '|':UITableViewCellContentView:0x7fcc025a58a0 )>",
    "<NSLayoutConstraint:0x600000a8d610 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fcc025a58a0.height == 0   (active)>"
)

Following is the view design

The is the view I have designed

现在我不知道造成该问题的原因是什么。因为最终的结果是令人满意的并且符合预期。

So following I wanted to know:

  1. 如何找出设计中的确切问题
  2. 如何找出哪个 View 以及该 View 的哪个约束产生了问题
  3. 删除这些警告真的很重要吗,因为我正在按预期进行设计

注意:我知道这里有数百万个线程来解决类似的问题,但其中大多数都是过时的和旧的。我也问它只是为了知道避免这些问题的完美方法以及跟踪问题的简单且最佳的方法。

最佳答案

错误消息显示存在冲突的约束。并非所有这些约束都能同时成立。您需要删除一个或进行编辑。

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600000a8c530 H:[UIView:0x7fcc025a6390]-(1)-|   (active, names: '|':UIView:0x7fcc025a5dc0 )>

您可以采取一些步骤来识别问题:

  1. 显示调试 View 层次结构

enter image description here

  • 搜索并查找导致问题的约束和 View (0x600000a8c5300x7fcc025a6390),如 this 中所述回答。
  • enter image description here

  • 然后尝试调查冲突。
  • 您还可以查看这些文档以获取更多信息。

    关于ios - 如何找出哪个约束不起作用或产生问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62932505/

    相关文章:

    iphone - 推特 API : Decode string returned by getFollowerIDsFor from Twitter (MGTwitterEngine for Obj-C)

    iphone 输入类型(带两位小数的数字)

    ios - 将保留对象分配给__unsafe_unretained变量,但是为什么它不崩溃?

    ios - 播放镜像与不镜像之间的区别

    ios - 选择 UIButton 时未正确响应

    ios - 无法使用类型为 '[NSObject : Any]' 的索引下标类型为 'String' 的值

    ios - 从另一个类加载函数在 Swift IOS 中崩溃

    ios - 标签跟随设备尺寸

    ios - 从设置应用程序中查找温度单位

    ios - Thread1v :signal SIGABRT