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];

4、iOS开发中使用Masonry让cell自适应高度
上一篇下一篇

猜你喜欢

热点阅读