很多时候会用到自动布局,例:分类标签、搜索页面中的热门搜索等等。
所以,简单的介绍一下:
1.masonry的自动布局
2.获取自动布局后的高度
masonry的自动布局
// footerView 是之前创建的View
[footerView addSubview:self.tagView];
// 自动布局 self.tagView
[self.tagView mas_makeConstraints: ^(MASConstraintMaker *make) {
// self.tagView的获取父视图
UIView *superView = footerView;
// 设置宽度为父视图的宽度-50 等价于(self.tagView.frame.size.width = footerView.frame.size.width - 50);
make.width.equalTo(superView.mas_width).with.offset(-50);
// 设置X为父视图的X+50 等价于(self.tagView.frame.origin.x = footerView.frame.origin.x + 54;);
make.top.equalTo(superView.mas_top).with.offset(54);
// 左距离
make.left.equalTo(superView.mas_left).with.offset(25);
make.leading.equalTo(superView.mas_leading).with.offset(0);
make.trailing.equalTo(superView.mas_trailing);
DLog(@"___%@",@(self.tagView.height))
}];
获取自动布局后的高度
调用self.tagView父视图的 layoutIfNeeded 后可以获取高度
layoutIfNeeded
如果,有需要刷新的标记,立即调用layoutSubviews进行布局
[footerView layoutIfNeeded]; // 下面会有关于layoutIfNeeded的介绍
CGFloat tagViewHeight = self.tagView.height;
关于UIView的布局的方法
layoutSubviews
layoutIfNeeded
setNeedsLayout
setNeedsDisplay
drawRect
sizeThatFits
sizeToFit
http://www.jianshu.com/p/bfa45eb4c4ba
之前在看资料的时候有发些人调用以下这个方法获取self.tagView的height
[self.tagView layoutIfNeeded];
CGFloat height = [self.tagView systemLayoutSizeFittingSize:
UILayoutFittingCompressedSize].height;
本人在模拟器中调用此方法能获取到self.tagView的高度,但在真机调试中失败了。
Masonry中的一些常用属性
// 左侧
@property (nonatomic, strong, readonly) MASConstraint *left;
// 顶部
@property (nonatomic, strong, readonly) MASConstraint *top;
// 右侧
@property (nonatomic, strong, readonly) MASConstraint *right;
// 底部
@property (nonatomic, strong, readonly) MASConstraint *bottom;
// 首部
@property (nonatomic, strong, readonly) MASConstraint *leading;
// 尾部
@property (nonatomic, strong, readonly) MASConstraint *trailing;
// 宽
@property (nonatomic, strong, readonly) MASConstraint *width;
// 高
@property (nonatomic, strong, readonly) MASConstraint *height;
// 中心点x
@property (nonatomic, strong, readonly) MASConstraint *centerX;
// 中心点y
@property (nonatomic, strong, readonly) MASConstraint *centerY;
// 文本基线
@property (nonatomic, strong, readonly) MASConstraint *baseline;
// 居中显示视图
UIView *myView = [[UIView alloc] init];
myView.backgroundColor = [UIColor blueColor];
[self.view addSubview:myView];
[myView mas_makeConstraints:^(MASConstraintMaker *make) {
// 设置当前center和父视图的center一样
make.center.mas_equalTo(self.view);
// 设置当前视图的大小
make.size.mas_equalTo(CGSizeMake(300, 300));
}];
网友评论
UILayoutFittingCompressedSize].height; 没毛病 我的真机可以的