多个label,可变长情况下使用Masonry

        常见的masonry的使用是比较简单,可应付一些常见的布局。但有些布局是动态的,则需要一些masonry和自动布局的技巧,直接上图,如何实现图片中cell的布局。

下图中,播放量可变长(必须显示完整);绿底的是“出品人名称”超长显示...;置顶icon必须跟在出品人后面,但不能超过右侧海报图的left。如果写死lable的宽度是很low的代码,本文介绍一种优雅的API

        为了说明问题,这里用:以下几个字段说明:playIcon(播放icon),playCount(播放量),account(出品人名称),topIcon(置顶),如果仅仅是下面的代码,

playIcon.right = playCount.left;
playCount.right = account.left;
account.right = topIcon.left;
实现不了图中的效果。
解决办法就是:在设置好right和left的基础上,使用masonry的优先级和uiview的布局优先级,主要涉及两个API,如下:
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis//别挤我,
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis//抱紧,类似于sizefit,不会根据父view长度变化
那么,我们队account和playcount进行设置:
[_account setContentCompressionResistancePriority:UILayoutPriorityFittingSizeLevel forAxis:UILayoutConstraintAxisHorizontal];//宽度不够时,可以被压缩
[_account setContentHuggingPriority:UILayoutPriorityRequired/*抱紧*/
                                     forAxis:UILayoutConstraintAxisHorizontal];
[_playCount setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];//不可以被压缩,尽量显示完整

另外,topIcon在设置left和right的时候,需要对right使用低优先级。

make.left.equalTo(self.playCount.mas_right).offset(gapMargin).priorityHigh();
make.right.equalTo(self.moreBtn.mas_left).priorityLow();//must be low priority


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值