在 Xcode 4.5 中设置 translatesAutoresizingMaskIntoConstraints 的位置
Posted
技术标签:
【中文标题】在 Xcode 4.5 中设置 translatesAutoresizingMaskIntoConstraints 的位置【英文标题】:Where to set translatesAutoresizingMaskIntoConstraints in Xcode 4.5 【发布时间】:2013-01-07 21:10:27 【问题描述】:我需要将translatesAutoresizingMaskIntoConstraints
设置为NO
。默认情况下,它设置为 YES
(以帮助大多数应用程序从 struts 和 springs 过渡到新的自动布局)。
Xcode 中是否有可以将默认值从YES
更改为NO
的地方?
或者我必须为每个视图手动设置它吗?
【问题讨论】:
【参考方案1】:这个问题我迟到了,但是 Xcode 5 和 6 中仍然缺少提到的选项,所以这个问题仍然有意义。
实际上,我们始终可以通过在 Storyboard (Interface Builder) 中添加 用户定义的运行时属性 来为视图/控件/对象的任何属性设置值,如下图所示。
它也适用于 translatesAutoresizingMaskIntoConstraints。这样问题就可以解决了。
【讨论】:
这是一个巧妙的解决方案,但我相信它会导致 XCode 6.3 beta 2 中的“冻结”。当我删除它时,我的视图加载正确.. 但有了它,它在我之后崩溃了升级到 beta 2。 这在 XCode 9 和 ios 11 中适用于任何正在寻找更新解决方案的人。这应该是现在公认的答案。【参考方案2】:这是一个很好的问题 - 我已经尝试为自己找到一个答案。可悲的是,看起来没有“快速修复”。目前,Apple 考虑基于约束的布局选择加入 - 甚至命名UIView
Class Reference 的一部分:
选择基于约束的布局
但是选择加入不是全球性的。我认为这是因为如果您只是将 Springs & Struts 转换为 Constraints,则并非一切看起来都很好。某些 UI 元素会损坏,否则您会收到大量无法满足的约束错误。
我能想到一个可能的解决方案 - 我自己没有尝试过,但您可以在 UIView
上创建一个类别,将 all UIView
对象设置为为- (BOOL)translatesAutoresizingMaskIntoConstraints
返回NO
。虽然我不知道这会破坏什么,但它会将translatesAutoresizingMaskIntoConstraints
全局设置为NO
。
这里是a good introduction to Categories if you want to learn more about them!
【讨论】:
如何使用类别设置所有UIView对象返回no?类别方法仅适用于实例。 这个答案已被接受,但它有效吗?我预计这种方法会有问题。 类别方法破坏了原始方法@Boon,并且每个实例都使用新的实现。 Unless the original method was itself implemented in a category.【参考方案3】:当您必须更改子视图的大小或位置时。在设置子视图的框架之前使用(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 及更高版本中是默认的(自动布局)。谢谢
【讨论】:
很好,但我猜你这样做可能会导致冲突,而不是考虑使用现有的约束。【参考方案4】:根据文档,如果视图是通过 Interface Builder 添加的,则此属性会自动设置为 NO
。
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints
【讨论】:
好地方。请注意,UICollectionViewCell contentViews 是一个例外。以上是关于在 Xcode 4.5 中设置 translatesAutoresizingMaskIntoConstraints 的位置的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IIS 7 应用程序池中设置 .net Framework 4.5 版本
如何在 Objective C 中的 Xcode 8 中设置约束