UILayoutGuide是一个iOS 9后推出的一个虚拟View.我们可以理解为一个hidden的View(其实没有这个View.因为UILayoutGuide继承与NSObject)
@interface UILayoutGuide : NSObject <NSCoding> /// 在`owningView`坐标系内的frame(可以直接理解为虚拟View的frame) @property(nonatomic,readonly) CGRect layoutFrame; /* 因为添加`UILayoutGuide`是通过UIView的`addLayoutGuide:`方法添加的. 所以这个owningView就是调用`addLayoutGuide:`的`view`. */ @property(nonatomic,weak,nullable) UIView *owningView; /// 和NSConstraints的`identifier`也是一个道理,用来调试用的. @property(nonatomic,copy) NSString *identifier; // MARK: 下面的属性可以在`NSLayoutAnchor.h`中看 /// 前沿锚 @property(nonatomic,readonly,strong) NSLayoutXAxisAnchor *leadingAnchor; /// 后沿锚 @property(nonatomic,readonly,strong) NSLayoutXAxisAnchor *trailingAnchor; /// 左边锚 @property(nonatomic,readonly,strong) NSLayoutXAxisAnchor *leftAnchor; /// 右边锚 @property(nonatomic,readonly,strong) NSLayoutXAxisAnchor *rightAnchor; /// 上边锚 @property(nonatomic,readonly,strong) NSLayoutYAxisAnchor *topAnchor; /// 底边锚 @property(nonatomic,readonly,strong) NSLayoutYAxisAnchor *bottomAnchor; /// 宽度锚 @property(nonatomic,readonly,strong) NSLayoutDimension *widthAnchor; /// 高度锚 @property(nonatomic,readonly,strong) NSLayoutDimension *heightAnchor; /// centerX锚 @property(nonatomic,readonly,strong) NSLayoutXAxisAnchor *centerXAnchor; /// centerY锚 @property(nonatomic,readonly,strong) NSLayoutYAxisAnchor *centerYAnchor;这个就是一个工厂类.可以方便的添加与锚点有关的约束.
// This layout anchor subclass is used for sizes (width & height). NSLAYOUTANCHOR_EXTERN API_AVAILABLE(macos(10.11), ios(9.0)) @interface NSLayoutDimension : NSLayoutAnchor<NSLayoutDimension *> // These methods return an inactive constraint of the form thisVariable = constant. - (NSLayoutConstraint *)constraintEqualToConstant:(CGFloat)c __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintGreaterThanOrEqualToConstant:(CGFloat)c __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintLessThanOrEqualToConstant:(CGFloat)c __attribute__((warn_unused_result)); // These methods return an inactive constraint of the form thisAnchor = otherAnchor * multiplier. - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m __attribute__((warn_unused_result)); // These methods return an inactive constraint of the form thisAnchor = otherAnchor * multiplier + constant. - (NSLayoutConstraint *)constraintEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintGreaterThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c __attribute__((warn_unused_result)); - (NSLayoutConstraint *)constraintLessThanOrEqualToAnchor:(NSLayoutDimension *)anchor multiplier:(CGFloat)m constant:(CGFloat)c __attribute__((warn_unused_result)); @end这些创建都比较方便.创建完毕之后都会被转化成约束.具体参数其实可以看上面UILayoutGuide的使用用例.具体参数可以参考UILayoutConstraint.配合UILayoutGuide食用更佳.
