Ios 为什么自动布局忽略了一些限制?
该应用程序有一个简单的TableView控制器,可以在左侧显示图像。(见第一幅图)。Ios 为什么自动布局忽略了一些限制?,ios,objective-c,autolayout,Ios,Objective C,Autolayout,该应用程序有一个简单的TableView控制器,可以在左侧显示图像。(见第一幅图)。ui视图与x轴对齐,具有前导空间约束和最大宽度。我本以为这也足以防止图像失真超过130像素,但事实并非如此。当设备处于横向模式时,问题更加明显 为什么会忽略某些约束(请参见如何在view debugger屏幕截图中灰显某些约束),更重要的是,如何使具有固定高度的可变宽度图像在单元格中不失真 你问了两个问题,我将分别回答: 为什么忽略某些约束: 事实上,他们并没有被忽视。您尚未为这些特定区域设置任何约束。应用约
ui视图
与x轴对齐,具有前导空间约束和最大宽度。我本以为这也足以防止图像失真超过130像素,但事实并非如此。当设备处于横向模式时,问题更加明显
为什么会忽略某些约束(请参见如何在view debugger屏幕截图中灰显某些约束),更重要的是,如何使具有固定高度的可变宽度图像在单元格中不失真
你问了两个问题,我将分别回答:
你有矛盾的约束。将前导空间设置为superview,并将图像的centerX约束到superview的centerX(具有恒定偏移)。这两个参数足以决定宽度。随着superview变得更宽,其中心会从其前缘移动得更远。因此,图像视图的中心也是如此。由于图像视图的前缘已定位,因此将其中心移得更远会增加其宽度 这将与显式宽度约束冲突 我希望不可满足的约束会被记录下来
你需要弄清楚你希望如何解决冲突。可以降低其中一个约束的优先级。您只需摆脱centerX约束即可。或者由您决定。您拥有的图像类型将随着图像宽度的改变而扭曲。如果您真的想拥有可变宽度,那么您也需要为图像设置高度变量,或者您可以选择使用
AspectFill内容模式
。如果约束相互矛盾,XCode不会用红色而不是蓝色显示它们吗?只有当它们在画布上的布局中实际上相互矛盾时。Xcode不会调用潜在的相互矛盾的约束。两条垂直线和一条水平线是灰色的。这是否意味着未设置这些约束?还有,你如何解释蓝灰相间的网格线?如中所示,哪些线对应于哪些约束,以便您可以系统地将灰线更改为蓝线?将矩形平分的两条最内侧的线显示水平中心和垂直中心。构成矩形的四条线显示父视图的前导空间、尾随空间、顶部空间和底部空间。矩形外的两条线显示恒定宽度(最底部的水平线)和恒定高度(最左侧的垂直线)。