UILayoutGuide

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;

除了上面的这些还有UIView.h文件中定义的UILayoutGuide的分类

@interface UILayoutGuide (UIConstraintBasedLayoutDebugging)

/// 获取axis方向的有关的约束.
- (NSArray<__kindof NSLayoutConstraint *> *)constraintsAffectingLayoutForAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(10.0));

/// 是否有约束冲突
@property(nonatomic, readonly) BOOL hasAmbiguousLayout API_AVAILABLE(ios(10.0));
@end
UILayoutGuide使用用例
self.viewTest = [UIView new];
self.viewTest.backgroundColor = [UIColor greenColor];
[self.view addSubview:self.viewTest];
self.viewTest.translatesAutoresizingMaskIntoConstraints = NO;

UILayoutGuide *layoutGuide = [[UILayoutGuide alloc] init];
[self.view addLayoutGuide:layoutGuide];
[layoutGuide.leftAnchor constraintEqualToAnchor:self.view.leftAnchor].active = YES;
[layoutGuide.topAnchor constraintEqualToAnchor:self.view.topAnchor].active = YES;
[layoutGuide.rightAnchor constraintEqualToAnchor:self.view.rightAnchor].active = YES;
[layoutGuide.heightAnchor constraintEqualToAnchor:self.view.heightAnchor multiplier:.5].active = YES;

NSLayoutDimension

这个就是一个工厂类.可以方便的添加与锚点有关的约束.

// 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食用更佳.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值