亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOSUI基礎08

2019-11-14 18:33:56
字體:
來源:轉載
供稿:網友
  • 自定義等高cell
    // 創建自定義cell添加子控件的方法initWithStyle(note:子控件要添加到contentView上)    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier NS_AVAILABLE_IOS(3_0);    // 傳統創建自定義view添加子空間的方法    //- (instancetype)initWithFrame:(CGRect)frame    // 自定義xib時調用的方法    //- (void)awakeFromNib;    //- (instancetype)initWithCoder:(NSCoder *)coder    // 布局子控件    - (void)layoutSubviews   {      [super layoutSubviews];   }   //設置數據   - (void)setXX:(模型數據類型 *)XX
  • Masonry

    • 用Masonry布局子控件frame更簡潔易懂,可讀性更好。
    • 使用Masonry之前需要導入2個宏和Masonry頭文件
     //除掉前綴  #define MAS_SHORTHAND //可接收數據類型參數  #define MAS_SHORTHAND_GLOBALS  #import "Masonry.h"  - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{  if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {      // 常用的間距      CGFloat margin = 10;      CGFloat contentViewW = CGRectGetWidth(self.contentView.frame);      CGFloat contentViewH = CGRectGetHeight(self.contentView.frame);      // 1.圖片      UIImageView *icon_ImageView = [[UIImageView alloc] init];      [self.contentView addSubview:icon_ImageView];      //icon_ImageView.backgroundColor = [UIColor blueColor];      self.icon_ImageView = icon_ImageView;      [icon_ImageView makeConstraints:^(MASConstraintMaker *make) {//            make.left.equalTo(self.contentView.left).offset(margin);//            make.top.equalTo(self.contentView.top).offset(margin);          make.top.left.equalTo(self.contentView).offset(margin);          make.bottom.equalTo(self.contentView.bottom).offset(-margin);          make.width.equalTo(80);      }];}
  • 自定義不等高cell

     // 添加子控件(把有可能顯示的子控件都加進去)     - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier     //布局子空間Frame     - (void)layoutSubviews    {        [super layoutSubviews];    }    // 設置子控件顯示的數據    - (void)setXX:(模型數據類型 *)XX    //方案1:在heightForRowAtIndexPath:方法調用之前將所有cell的高度計算清楚    /** *  返回每一行cell的具體高度 */- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    JXStatus *status = self.statuses[indexPath.row];    CGFloat margin = 10;    CGFloat cellHeight = 0;    // 頭像    CGFloat iconX = margin;    CGFloat iconY = margin;    CGFloat iconWH = 30;    CGRect iconImageViewFrame = CGRectMake(iconX, iconY, iconWH, iconWH);    // 文字    CGFloat textX = iconX;    CGFloat textY = CGRectGetMaxY(iconImageViewFrame) + margin;    CGFloat textW = [UIScreen mainScreen].bounds.size.width - 2 * textX;    CGSize textMaxSize = CGSizeMake(textW, MAXFLOAT);    NSDictionary *textAttrs = @{NSFontAttributeName : [UIFont systemFontOfSize:14]};    CGFloat textH = [status.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttrs context:nil].size.height;    CGRect text_labelFrame = CGRectMake(textX, textY, textW, textH);    // 配圖    if (status.picture) {        CGFloat pictureWH = 100;        CGFloat pictureX = textX;        CGFloat pictureY = CGRectGetMaxY(text_labelFrame) + margin;        CGRect pictureImageViewFrame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);        cellHeight = CGRectGetMaxY(pictureImageViewFrame);    } else {        cellHeight = CGRectGetMaxY(text_labelFrame);    }    cellHeight += margin;    return cellHeight;}// 方案2:在模型中計算cell高度,返回高度直接從模型中取出- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    JXStatus *status = self.statuses[indexPath.row];    return status.cellHeight;}//模型數據#import <UIKit/UIKit.h>@interface JXStatus : NSObject/**** 文字/圖片數據 ****//** 姓名 */@PRoperty (nonatomic, copy) NSString *name;/** 文本 */@property (nonatomic, copy) NSString *text;/** 頭像 */@property (nonatomic, copy) NSString *icon;/** 配圖 */@property (nonatomic, copy) NSString *picture;/** 是否為會員 */@property (nonatomic, assign) BOOL vip;/**** frame數據 ****//** 頭像的frame */@property (nonatomic, assign) CGRect iconFrame;/** 昵稱的frame */@property (nonatomic, assign) CGRect nameFrame;/** 會員的frame */@property (nonatomic, assign) CGRect vipFrame;/** 文字的frame */@property (nonatomic, assign) CGRect textFrame;/** 配圖的frame */@property (nonatomic, assign) CGRect pictureFrame;/** cell的高度 */@property (nonatomic, assign) CGFloat cellHeight;@end#import "JXStatus.h"@implementation JXStatus- (CGFloat)cellHeight{    if (_cellHeight == 0) {        CGFloat margin = 10;        // 頭像        CGFloat iconX = margin;        CGFloat iconY = margin;        CGFloat iconWH = 30;        self.iconFrame = CGRectMake(iconX, iconY, iconWH, iconWH);        // 昵稱(姓名)        CGFloat nameY = iconY;        CGFloat nameX = CGRectGetMaxX(self.iconFrame) + margin;        // 計算文字所占據的尺寸        NSDictionary *nameAttrs = @{NSFontAttributeName : [UIFont systemFontOfSize:17]};        CGSize nameSize = [self.name sizeWithAttributes:nameAttrs];        self.nameFrame = (CGRect){{nameX, nameY}, nameSize};        // 會員圖標        if (self.vip) {            CGFloat vipW = 14;            CGFloat vipH = nameSize.height;            CGFloat vipY = nameY;            CGFloat vipX = CGRectGetMaxX(self.nameFrame) + margin;            self.vipFrame = CGRectMake(vipX, vipY, vipW, vipH);        }        // 文字        CGFloat textX = iconX;        CGFloat textY = CGRectGetMaxY(self.iconFrame) + margin;        CGFloat textW = [UIScreen mainScreen].bounds.size.width - 2 * textX;        CGSize textMaxSize = CGSizeMake(textW, MAXFLOAT);        NSDictionary *textAttrs = @{NSFontAttributeName : [UIFont systemFontOfSize:14]};        CGFloat textH = [self.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttrs context:nil].size.height;        self.textFrame = CGRectMake(textX, textY, textW, textH);        // 配圖        if (self.picture) {            CGFloat pictureWH = 100;            CGFloat pictureX = textX;            CGFloat pictureY = CGRectGetMaxY(self.textFrame) + margin;            self.pictureFrame = CGRectMake(pictureX, pictureY, pictureWH, pictureWH);            _cellHeight = CGRectGetMaxY(self.pictureFrame);        } else {            _cellHeight = CGRectGetMaxY(self.textFrame);        }        _cellHeight += margin;    }    return _cellHeight;}@end
  • 自動布局
    • 在Main.storyboard添加好子控件,設置好約束
    • 設置子控件顯示的數據
      • -(void)setXX:(模型數據類型 *)XX
    • 在viewDidLoad中自動計算cell高度
      // 告訴tableView所有cell的真實高度是自動計算(根據設置的約束來計算)self.tableView.rowHeight = UITableViewAutomaticDimension;// 告訴tableView所有cell的估算高度self.tableView.estimatedRowHeight = 44;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色狠狠久久aa北条麻妃| 91免费在线视频网站| 亚洲aⅴ日韩av电影在线观看| 不用播放器成人网| 亚洲精品日韩激情在线电影| 亚洲精品一二区| 亚洲精品成a人在线观看| 欧美插天视频在线播放| 久久精品国产欧美亚洲人人爽| 国产精品欧美激情在线播放| 最好看的2019年中文视频| 91po在线观看91精品国产性色| 欧美xxxx18国产| 国产日韩欧美一二三区| 精品国产乱码久久久久久天美| 久久亚洲一区二区三区四区五区高| 久久久久久12| 国产精品欧美久久久| 国产成人精品亚洲精品| 国产精品自拍偷拍视频| 国产精品色午夜在线观看| 国产精品久久久久久av福利软件| 97在线视频免费| 亚洲一区二区久久久久久| 51精品在线观看| 中文字幕在线观看日韩| 欧美亚洲国产成人精品| 亚洲电影免费在线观看| 国产精品一久久香蕉国产线看观看| 国产mv免费观看入口亚洲| 国产精品久久久久9999| 精品日韩视频在线观看| 亚洲自拍另类欧美丝袜| 在线日韩av观看| 亚洲国产精品中文| 日韩欧美aⅴ综合网站发布| 久久精品小视频| 亚洲理论片在线观看| 欧美第一黄色网| 一本色道久久综合狠狠躁篇怎么玩| 亚洲四色影视在线观看| 国产婷婷色综合av蜜臀av| 精品欧美一区二区三区| 欧美大秀在线观看| 中文字幕国产亚洲2019| 欧美天天综合色影久久精品| 91久久精品美女| 日韩欧美亚洲国产一区| 国语自产精品视频在免费| 国产视频精品自拍| 亚洲精品成a人在线观看| 国产欧美日韩专区发布| 国产精品手机播放| 久久福利视频网| 欧美黑人一区二区三区| 亚洲天堂男人天堂| 91精品国产色综合久久不卡98口| 2019最新中文字幕| 欧美日韩不卡合集视频| 亚洲国产精品网站| 日韩欧美国产一区二区| 国产欧美日韩综合精品| 国产精品第一视频| 欧美情侣性视频| 亚洲香蕉伊综合在人在线视看| 国产亚洲福利一区| 欧美色xxxx| 国产精品国产福利国产秒拍| 日韩有码在线电影| 亚洲色图综合网| 国产不卡一区二区在线播放| 成人亚洲综合色就1024| 国产主播精品在线| 日韩经典第一页| 亚洲精品一区二三区不卡| 亚洲国产日韩欧美综合久久| 日韩精品中文字幕久久臀| 中文字幕亚洲在线| 日韩欧美精品中文字幕| 国产精品白嫩初高中害羞小美女| 亚洲第一区第二区| 深夜福利国产精品| 中文字幕亚洲在线| 日韩av在线直播| 欧美另类暴力丝袜| 国产精品高清免费在线观看| 91精品久久久久久久久久久久久久| 日韩欧美aaa| 日韩电影中文字幕在线| 美女国内精品自产拍在线播放| 亚洲淫片在线视频| 日韩欧美精品网址| 亚洲激情电影中文字幕| 在线观看免费高清视频97| 成人高清视频观看www| 欧美在线视频观看免费网站| 欧美一级淫片videoshd| 日本久久久久久久久久久| 国产99久久久欧美黑人| 自拍亚洲一区欧美另类| 欧美夫妻性生活xx| 色诱女教师一区二区三区| 亚洲成人999| 成人伊人精品色xxxx视频| 成人a在线观看| 91在线网站视频| 国产亚洲精品久久| 亚洲最大的网站| 久久精品国产69国产精品亚洲| 国产精品国内视频| 国产日韩在线视频| 国产成人一区二区| 亚洲精选中文字幕| 91久久精品美女| 美日韩精品视频免费看| 国产一区二区激情| 日韩中文有码在线视频| 日韩电影免费在线观看中文字幕| 97色在线视频观看| 亚洲精品国产精品久久清纯直播| 成人激情视频小说免费下载| 国产精品成人av在线| 久久深夜福利免费观看| 26uuu亚洲国产精品| 欧美日韩中文字幕在线| 亚洲黄色www网站| 欧美另类在线播放| 亚洲一区国产精品| 久久久亚洲精选| 亚洲国产精品中文| 色综合天天综合网国产成人网| 日韩av有码在线| 久久成人国产精品| 欧美日韩国产999| 欧美日韩加勒比精品一区| 久久久久女教师免费一区| 久久99精品国产99久久6尤物| 日韩欧美亚洲一二三区| 日韩精品一二三四区| 亚洲成色www8888| 色综合久久88| 亚洲毛片在线观看| 一本色道久久88综合亚洲精品ⅰ| 97视频色精品| 日韩精品极品视频| 蜜臀久久99精品久久久久久宅男| 精品国产一区久久久| 在线观看中文字幕亚洲| 91精品久久久久久综合乱菊| 日本一区二三区好的精华液| 成人亚洲欧美一区二区三区| 欧美猛男性生活免费| 国内精品久久久久影院优| 色偷偷88888欧美精品久久久| 国产精品稀缺呦系列在线| 91精品视频在线免费观看| 91成人天堂久久成人| 国产剧情久久久久久| 欧美日韩日本国产| 亚洲综合一区二区不卡| 欧美高清视频在线| 欧美人与物videos| 色yeye香蕉凹凸一区二区av| 91视频免费在线|