美文网首页
iOS 自适应常见需求

iOS 自适应常见需求

作者: 达_Ambition | 来源:发表于2018-12-17 22:34 被阅读3次
    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自适应高度

    相关文章

      网友评论

          本文标题:iOS 自适应常见需求

          本文链接:https://www.haomeiwen.com/subject/fvehkqtx.html