将被弃用的 UIView 自动布局方法的替代方法

Alternative to UIView autolayout methods which are to be deprecated

根据 UIView.h 头文件,以下方法将被弃用。

在代码中使用自动布局的替代方法是什么?

我看不出代码注释中推荐的方法如何替换它们现有的对应方法,因为它们处理的是实际约束,而不是 UIView 和约束之间的关系。

@interface UIView (UIConstraintBasedLayoutInstallingConstraints)

- (NSArray *)constraints NS_AVAILABLE_IOS(6_0);

- (void)addConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead, set NSLayoutConstraint's active property to YES.
- (void)addConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint activateConstraints:].
- (void)removeConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead set NSLayoutConstraint's active property to NO.
- (void)removeConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0); // This method will be deprecated in a future release and should be avoided.  Instead use +[NSLayoutConstraint deactivateConstraints:].
@end

约束本身包含关系(也就是说,它们指向关系中涉及的一个或多个视图),因此将约束添加到视图的旧方法是多余的,有时会造成混淆,因为您必须选择要将它们添加到层次结构中的右视图。

在新方法中,您只需创建约束并将它们的 active 属性 设置为 YES(对于 Objective-C)或 true( for Swift),系统会为您将其添加到正确的视图中。如果要添加多个约束,则调用 class 方法 activateConstraints:,它会为您设置 属性。

使用旧方法,由程序员将约束添加到正确的视图。如果您对涉及的视图 A 和视图 B 有约束,那么在何处添加约束有 3 种可能性:

  1. 如果视图A是视图B的子视图(或子视图的子视图),则应将约束添加到视图B。
  2. 如果视图B是视图A的子视图(或子视图的子视图),则应将约束添加到视图A。
  3. 如果视图 A 和视图 B 都是另一个视图(称为 C)的子视图,则应将约束添加到视图 C。

使用新方法,您只需将约束的 active 属性 设置为 YES/true,系统就会为您计算出来。简单多了。