37

我需要设置translatesAutoresizingMaskIntoConstraintsNO. 默认情况下,它设置为YES(以帮助大多数应用程序从 struts 和 springs 过渡到新的自动布局)。

Xcode中是否有可以将默认值从更改YES为的地方NO

还是我必须为每个视图手动设置它?

4

4 回答 4

21

我迟到了这个问题,但在 Xcode 5 和 6 中仍然缺少提到的选项,所以这个问题仍然有意义。

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

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

在此处输入图像描述

于 2015-01-29T13:00:46.180 回答
17

这是一个很好的问题——我试图为自己找到一个答案。可悲的是,看起来没有“快速修复”。目前,Apple 考虑基于约束的布局选择加入 - 甚至命名UIViewClass Reference的一部分:

选择基于约束的布局

但这种选择加入并不是全球性的。我认为这是因为如果您只是将 Springs & Struts 转换为 Constraints,则并非一切看起来都很好。一些 UI 元素会损坏,或者您会收到大量无法满足的约束错误。

我可以想到一种可能的解决方案 - 我自己没有尝试过,但是您可以在其上创建一个类别UIView,将所有 对象设置为UIView返回. 虽然我不知道这会破坏什么,但它会全局设置为.NO- (BOOL)translatesAutoresizingMaskIntoConstraintstranslatesAutoresizingMaskIntoConstraintsNO

如果您想了解更多关于类别的信息,这里有一个很好的分类介绍!

于 2013-01-10T21:33:01.507 回答
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];

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

于 2013-03-06T08:06:37.587 回答
5

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

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

于 2015-12-03T08:30:53.987 回答