替代UIView autolayout方法,这些方法将被弃用

时间:2015-04-28 06:03:46

标签: ios swift autolayout deprecated

根据UIView.h头文件,不推荐使用以下方法。

在代码中使用autolayout的替代方法是什么?

我不知道代码注释中建议的方法如何替换现有的对应方,因为它们处理实际约束而不是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

1 个答案:

答案 0 :(得分:8)

约束本身包含关系(即,它们指向关系中涉及的视图或视图),因此将约束添加到视图的旧方法是多余的,有时会令人困惑,因为您必须选择正确的视图在层次结构中将它们添加到。

以新方式,您只需创建约束并将其active属性设置为YES(对于Objective-C)或true(对于Swift),系统会将其添加为了正确的观点。如果要添加多个约束,则调用类方法activateConstraints:并为其设置属性。

使用旧方法,程序员可以将约束添加到正确的视图中。如果你有一个约束所涉及的视图A和视图B,那么有3种可能性来添加约束:

  1. 如果视图A是视图B的子视图(或子视图的子视图),则应将约束添加到视图B.
  2. 如果视图B是视图A的子视图(或子视图的子视图),则应将约束添加到视图A中。
  3. 如果视图A和视图B都是另一个视图的子视图(称之为C),则应将约束添加到视图C中。
  4. 使用新方法,您只需将约束的active属性设置为YES/true,系统就会为您解决此问题。它更容易。