在 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 的位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 xcode 4.5 在情节提要中设计滚动视图

如何在 IIS 7 应用程序池中设置 .net Framework 4.5 版本

如何在 Objective C 中的 Xcode 8 中设置约束

如何在 Xcode 4 中设置 NativeControls?

Unity中设置对象匀速移动

Unity中设置对象匀速移动