我需要将translatesAutoresizingMaskIntoConstraints
设置为NO
。默认情况下,它设置为YES
(以帮助大多数从struts和spring转换到新的自动布局的应用程序。)
Xcode中是否存在默认值可以从YES
更改为NO
的位置?
或者我是否必须为每个视图手动设置它?
答案 0 :(得分:20)
我迟到了这个问题,但Xcode 5& 6,所以问题仍然有意义。
实际上,我们总是可以通过在Storyboard(Interface Builder)中添加用户定义的运行时属性来为视图/控件/对象的任何属性设置一个值,如下面的屏幕截图所示。
它也适用于 translatesAutoresizingMaskIntoConstraints 。所以这个问题可以解决。
答案 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)
根据文档,如果通过Interface Builder添加视图,则此属性将自动设置为NO
。