文章原网址:https://blog.csdn.net/hherima/article/details/53318306
常见的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
作者:hherima
来源:CSDN
原文:https://blog.csdn.net/hherima/article/details/53318306
版权声明:本文为博主原创文章,转载请附上博文链接!