在Xcode 4.5中设置translatesAutoresizingMaskIntoConstraints的位置

时间:2013-01-07 21:10:28

标签: ios xcode ios6 xcode4.5 autolayout

我需要将translatesAutoresizingMaskIntoConstraints设置为NO。默认情况下,它设置为YES(以帮助大多数从struts和spring转换到新的自动布局的应用程序。)

Xcode中是否存在默认值可以从YES更改为NO的位置?

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

4 个答案:

答案 0 :(得分:20)

我迟到了这个问题,但Xcode 5& 6,所以问题仍然有意义。

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

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

enter image description here

答案 1 :(得分:16)

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

  

选择基于约束的布局

但是,选择加入不是全球性的。我认为这是因为如果你只是将Springs& Struts into Constraints。有些UI元素会中断,或者您会遇到大量不可满足的约束错误。

我可以想到一个可能的解决方案 - 我自己没有尝试过,但你可以在UIView上设置一个类别 all {{1 } {}返回UIView NO的对象。虽然我不知道这会破坏什么,但它会将- (BOOL)translatesAutoresizingMaskIntoConstraints全局设置为translatesAutoresizingMaskIntoConstraints

这是a good introduction to Categories if you want to learn more about them

答案 2 :(得分:4)

当您必须更改子视图的大小或位置时。在设置子视图的框架之前使用(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及更高版本中的默认值(AutoLayout)。感谢

答案 3 :(得分:4)