禁用单个UIImageView的自动布局

时间:2015-11-24 14:45:16

标签: ios objective-c autolayout

我的照片应用程序中有一个UIImageView,它根据导入的图像改变大小。大小是动态创建的,然后以编程方式定位在屏幕中央,而不使用自动布局。

现在我已经使用了

self.imageViewCanvas.translatesAutoresizingMaskIntoConstraints = YES;
[self.imageViewCanvas setFrame:CGRectMake(0, 0, screenWidth, screenHeight)];

禁用约束。问题是每当我加载应用程序时,我都会收到包含以下内容的长警告消息:

无法同时满足约束。     可能至少以下列表中的一个约束是您不想要的约束。     试试这个:         (1)看看每个约束,并试图找出你不期望的;         (2)找到添加了不需要的约束或约束的代码并修复它。     (注意:如果您正在查看您不了解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints) (     "&#34 ;,     "" ) 将尝试通过打破约束来恢复 在UIViewAlertForUnsatisfiableConstraints上创建一个符号断点,以便在调试器中捕获它。 列出的UIView上的UIConstraintBasedLayoutDebugging类别中的方法也可能有用。

有没有办法禁用此特定警告,还是可以通过某种方式调整代码以避免它?

由于

1 个答案:

答案 0 :(得分:1)

对于启用了自动布局的故事板或NIB,Xcode将提供缺少的约束。这发生在构建时。如果您查看“大小”检查器以查找尚未添加任何约束的视图,您将看到有关Xcode为您添加约束的消息。所以,基本上,无论你做什么,图像视图都会受到限制。

如果您将translatesAutoresizingMaskIntoConstraints设置为true,则会与自动提供的约束冲突。您可以删除/停用这些约束,但很难获得对它们的引用。

您的选择:

  • 使用自动布局定位图像视图。很容易实现你想要的。
  • 关闭整个NIB的自动布局,因此没有约束,默认情况下translatesAutoresizingMaskIntoConstraints为真。
  • 在NIB中添加您自己的足够约束,但在构建时将其标记为在“属性”或“大小”检查器上删除。这向Xcode发出信号,要求您接管并阻止它提供自己的约束。 (这通常在您以编程方式提供约束时完成,但如果您打算开启translatesAutoresizingMaskIntoConstraints,它也可以正常工作。)
  • 添加您自己的约束并为其设置出口。在开启translatesAutoresizingMaskIntoConstraints之前以编程方式停用它们。