iOS 自适应常见需求
2018-12-17 本文已影响3人
达_Ambition
1、在自定义cell的高度的时候,动态计算cell的高度(主要是计算cell上的label根据内容自适应的高度)
1、自定义cell的.h文件
#import <UIKit/UIKit.h>
#import "YDTaoXiaoDianModel.h"
@interface YDTaoXiaoDianAddressCell : UITableViewCell
@property(nonatomic,strong)YDTaoXiaoDianModel *model;
@property(nonatomic,strong)UILabel *addressLab;
@property(nonatomic,strong)UILabel *distanceLab;
@property(nonatomic,strong)UIButton *mapBtn;
@property(nonatomic,strong)UIButton *phoneBtn;
+(CGFloat)getContenHightBytext:(NSString*)text;//根据文本内容获取label高度
@end
2、自定义cell的.m文件
+(CGFloat)getContenHightBytext:(NSString*)text{
return [TooBox countTextHeight:text maxWith:260 font:[UIFont systemFontOfSize:15]];
}
3、视图控制器VC
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat height = 0.0;
if (indexPath.section == 0) {
if (indexPath.row == 0) {
height = self.view.width*0.7;
}else if (indexPath.row == 1){
height=120;
}else{
// 动态计算cell的高度
height = [YDTaoXiaoDianAddressCell getContenHightBytext:self.model.address]+50;
}
}
if (indexPath.section == 1) {
if (indexPath.row==0) {
height=44;
}else{
height=_webViewHeight;
}
}
return height;
}
2、用masonry自适应label高度和宽度
1.自适应宽度前提不需要设置label的宽度
//宽度够时
[yourLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
//宽度不够时
[yourLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
2.label多行自适应高度
label.preferredMaxLayoutWidth = width;//如果是多行的话给一个
[label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];//设置huggingPriorityhuggingPriority
label.numberOfLines = 0;//设置换行
3、在masonry给label添加约束时,要实现label多行显示高度自适应,一定不能设置label 的高度(即无需写以下代码:make.height.mas_equalTo(@height); )
[self.addressLa mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.tagLa.mas_right).offset(5);
高度一定不能添加👇👇👇
// make.height.equalTo(@30);
make.top.equalTo(self.tagLa);
}];
3、布局某个控件时,取到上一个控件的x或y值作为该控件的起始点的参考值(eg:CGRectGetMaxY)
在获取上一个控件的y值时,必须让该控件完全重绘完毕,否则取到的CGRectGetMaxY值不准确,解决方法:在[self.view layoutIfNeeded];方法后再去添加新控件
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.line.frame), kScreenWidth, kScreenWidth-70) collectionViewLayout:layout];