关于适配

对于项目中的适配, 我使用的三方库是SDAutoLayout. 但是存在一定缺陷(关于模拟器与真机显示效果是有差异的, 适配出来效果是在真机上会变形).

那么会有人问:你为什么不直接设置rect?

我设置了, 有时候无效.

关于SDAutoLayout最新版:

1、增加设置偏移量offset功能

2、修复之前button作为父视图时内部控件不能自动布局问题

3.1 设置一排固定间距自动宽度子view

3.2 设置一排固定宽度自动间距子view

4、增加DemoVC10scroll任意布局内容自适应

实际结合了3.1和UIScrollView自适应

5、增加DemoVC14xib的cell高度自适应

但是缺陷是:

设置宽度与高度时不起作用(属性设置为:object.sd_layout.heightIs(height).widthIs(width))

针对这个缺陷,

我将xib中对控件所添加的宽或者高的约束拖拽至.h中, 作为一个变量, 设置这个变量的constant属性, 可以实现宽高约束更改. 效果很理想.

对于SDAutoLayout的优点, 

不多说, 用过的即可体会, 对于图文混排, 可以有所尝试. 我在项目中的图文混排, cell中label高度自适应, 就是借此实现. 部分代码参考如下:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath

{

return[self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width tableView:_myTableView];

}   //设置每个cell的高度(自适应)

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

SentimentCell*cell = [tableView dequeueReusableCellWithIdentifier:CellId];

SentimentCellModel*model = [_dataArr objectAtIndex:indexPath.row];

cell.model= model;//cell重写setModel方法, 设置控件参数, 根据量度自定义布局

[cell useCellFrameCacheWithIndexPath:indexPath tableView:tableView];

}

在cell中的重写方法实现是:

-(void)setModel:(SentimentCellModel*)model

{

CGFloatmargin =10;

_model= model;

..//其他属性传参

[self setupAutoHeightWithBottomView:_timeStr bottomMargin:5];//SDAutoLayout中cell高度自适应中关键句, 根据参照视图实现高度自适应.

}

关于宽度自适应, 

就是针对label为主, 大多还是使用"[text sizeWithFont:_titleName.font constrainedToSize:sizeTitle lineBreakMode:NSLineBreakByWordWrapping]"为主, 

虽然文档强调iOS7.0之后更改成"[textStr2 boundingRectWithSize:size options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;", 但旧的方法调出来一样可以用, 还略简便.

另外, 对拿到的字符串数据, 去掉空格与回车符是不可忽视的事情.

目前参照以下代码方式, 效果可佳:

_model.text= [_model.text stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];//去掉空格

_model.text= [_model.text stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];//去掉两端空格与回车

目前, 针对cell行数过多, 最多显示两到三行, 其余要显示省略号:

我是先设置label的lineBreakMode为NSLineBreakByTruncatingTail, 另外我通过计算字符串长度与label的高度来判断最多显示的行数所需要的frame, 目前算误差小一些. (希望有大神看到优化的方案告知我, 我做优化处理).

恩, 我的""第一篇, 先这样, 后续会再进行补充.

后续补充:

现阶段项目中已经摒弃xib,手写控件,都是以iPhone6的分辨率为基础做比例运算,乘以UI给的尺寸参数进行适配。

你可能感兴趣的:(关于适配)