Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么自动布局忽略了一些限制?_Ios_Objective C_Autolayout - Fatal编程技术网

Ios 为什么自动布局忽略了一些限制?

Ios 为什么自动布局忽略了一些限制?,ios,objective-c,autolayout,Ios,Objective C,Autolayout,该应用程序有一个简单的TableView控制器,可以在左侧显示图像。(见第一幅图)。ui视图与x轴对齐,具有前导空间约束和最大宽度。我本以为这也足以防止图像失真超过130像素,但事实并非如此。当设备处于横向模式时,问题更加明显 为什么会忽略某些约束(请参见如何在view debugger屏幕截图中灰显某些约束),更重要的是,如何使具有固定高度的可变宽度图像在单元格中不失真 你问了两个问题,我将分别回答: 为什么忽略某些约束: 事实上,他们并没有被忽视。您尚未为这些特定区域设置任何约束。应用约

该应用程序有一个简单的TableView控制器,可以在左侧显示图像。(见第一幅图)。
ui视图
与x轴对齐,具有前导空间约束和最大宽度。我本以为这也足以防止图像失真超过130像素,但事实并非如此。当设备处于横向模式时,问题更加明显

为什么会忽略某些约束(请参见如何在view debugger屏幕截图中灰显某些约束),更重要的是,如何使具有固定高度的可变宽度图像在单元格中不失真


你问了两个问题,我将分别回答:

  • 为什么忽略某些约束:
  • 事实上,他们并没有被忽视。您尚未为这些特定区域设置任何约束。应用约束时,相应的线以蓝色亮显。如果尚未对特定边应用约束,则该边将保持灰色

  • 如何使具有固定高度的可变宽度图像在单元格中不失真?
  • 您可以使用AspectFit或AspectFill,这样图像的纵横比就不会受到干扰,看起来也不会拉伸

    您还应该从ImageView中删除宽度约束。如果您知道您的身高不会从130增加,那么您可以使用AspectFill。如果图像高度可以超过130,则应该使用AspectFit


    你有矛盾的约束。将前导空间设置为superview,并将图像的centerX约束到superview的centerX(具有恒定偏移)。这两个参数足以决定宽度。随着superview变得更宽,其中心会从其前缘移动得更远。因此,图像视图的中心也是如此。由于图像视图的前缘已定位,因此将其中心移得更远会增加其宽度

    这将与显式宽度约束冲突

    我希望不可满足的约束会被记录下来


    你需要弄清楚你希望如何解决冲突。可以降低其中一个约束的优先级。您只需摆脱centerX约束即可。或者由您决定。

    您拥有的图像类型将随着图像宽度的改变而扭曲。如果您真的想拥有可变宽度,那么您也需要为图像设置高度变量,或者您可以选择使用
    AspectFill内容模式
    。如果约束相互矛盾,XCode不会用红色而不是蓝色显示它们吗?只有当它们在画布上的布局中实际上相互矛盾时。Xcode不会调用潜在的相互矛盾的约束。两条垂直线和一条水平线是灰色的。这是否意味着未设置这些约束?还有,你如何解释蓝灰相间的网格线?如中所示,哪些线对应于哪些约束,以便您可以系统地将灰线更改为蓝线?将矩形平分的两条最内侧的线显示水平中心和垂直中心。构成矩形的四条线显示父视图的前导空间、尾随空间、顶部空间和底部空间。矩形外的两条线显示恒定宽度(最底部的水平线)和恒定高度(最左侧的垂直线)。