TAG

RSS订阅

收藏本站

设为首页

当前位置:主页 > 移动开发 > IOS开发 >

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

发布时间:2017-04-19 14:28 类别:IOS开发

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

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

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

 

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

 

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

 

[objc] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. make.left.equalTo(self.playCount.mas_right).offset(gapMargin).priorityHigh();  
  2. make.right.equalTo(self.moreBtn.mas_left).priorityLow();//must be low priority  

下一篇:没有了 上一篇:iOS计算完整文字高度(适应iOS 10)

猜你会喜欢....

Copyright © 2015 www.wahenzan.com 哇!很赞 版权所有 浙ICP备14030256号-1 Power by DedeCms

浙公网安备 33010602005986号

声明:本站所有文章除标明原创外,均来自网络转载,版权归原作者所有,如果有侵犯到您的权益,请联系本站删除 网站管理员:758763728

360网站安全检测平台