在Xcode 4.5中设置translatesAutoresizingMaskIntoConstraints的位置

Jon*_*Cox 34 xcode ios autolayout ios6 xcode4.5

我需要设置translatesAutoresizingMaskIntoConstraintsNO.默认情况下,它设置为YES(以协助大多数从struts和spring转换到新的Auto Layout的应用程序).

Xcode中有哪些地方可以将默认值更改YESNO

或者我是否必须为每个视图手动设置它?

Coc*_*Bob 20

我迟到了这个问题,但Xcode 5和6中仍然没有提到上述选项,所以这个问题仍然有意义.

实际上,我们总是可以通过在Storyboard(Interface Builder)中添加用户定义的运行时属性来为视图/控件/对象的任何属性设置一个值,如下面的屏幕截图所示.

它也适用于translatesAutoresizingMaskIntoConstraints.所以这个问题可以解决.

在此输入图像描述

  • 对于正在寻找更新解决方案的任何人来说,这在XCode 9和iOS 11中都能正常工作.这应该是现在接受的答案. (2认同)

red*_*ulb 16

这是一个很好的问题 - 我试图找到一个自己的答案.可悲的是,它似乎没有"快速修复".目前,Apple考虑基于Constraint的布局选择 - 甚至命名UIView类参考的一部分:

选择基于约束的布局

但是,选择加入不是全球性的.我认为这是因为如果你只是将Springs&Struts变成约束,那么一切看起来都不错.一些UI元素中断,或者您会得到大量不可满足的约束错误.

我能想到的一个可能的解决方案-我还没有尝试过自己,但你可以做一个品类上UIView,设置的所有 UIView对象返回NO- (BOOL)translatesAutoresizingMaskIntoConstraints.虽然我不知道这是什么会打破,将全局设置translatesAutoresizingMaskIntoConstraintsNO.

这里是一个很好的介绍,分类,如果你想了解更多关于他们!

  • 这个答案已被接受,但是它有效吗?我希望这种方法有问题. (3认同)

Muh*_*Ali 5

当您必须更改子视图的大小或位置时。(BOOL)translatesAutoresizingMaskIntoConstraints在设置子视图的框架之前使用方法。

[self.benchmarkButton removeFromSuperview];
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.origin.y+40, 260, 30)];
[self.benchmarksView addSubview:self.benchmarkButton];
Run Code Online (Sandbox Code Playgroud)

这样你的子视图就不会受到约束,因为它是 Xcode 4.3 及更高版本中的默认值(自动布局)。谢谢


kwl*_*kwl 5

根据文档,NO如果通过 Interface Builder 添加视图,则此属性会自动设置为。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints

  • 好地方。请注意, UICollectionViewCell contentViews 是一个例外。 (2认同)