将被弃用的 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 种可能性:
- 如果视图A是视图B的子视图(或子视图的子视图),则应将约束添加到视图B。
- 如果视图B是视图A的子视图(或子视图的子视图),则应将约束添加到视图A。
- 如果视图 A 和视图 B 都是另一个视图(称为 C)的子视图,则应将约束添加到视图 C。
使用新方法,您只需将约束的 active
属性 设置为 YES/true
,系统就会为您计算出来。简单多了。
根据 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 种可能性:
- 如果视图A是视图B的子视图(或子视图的子视图),则应将约束添加到视图B。
- 如果视图B是视图A的子视图(或子视图的子视图),则应将约束添加到视图A。
- 如果视图 A 和视图 B 都是另一个视图(称为 C)的子视图,则应将约束添加到视图 C。
使用新方法,您只需将约束的 active
属性 设置为 YES/true
,系统就会为您计算出来。简单多了。