- 本周将知乎日报仿写任务总体上算是完成了,这周主要完善了评论功能和收藏功能,学习到了自适应
cell
高度和使用FMDB
数据库的用法
关于实现自适应cell高度
- 在写评论页面时,因为请求到评论的字数不一致,会导致评论的行数不同,因此想让单元格的高度随着行数的变化而自适应。
- 一开始想到的办法比较无脑,比较暴力没有技术含量。就是算出评论文字占
label
每一行的宽度,每一行的高度,再用总字数在此font
下所需要的宽度去除以每一行的高度得知需要的行数。最后根据行数✖️每一行行高
可以大致算出改单元格所占的高度。然后每一条评论都用此方法计算后设置该评论单元格的高度。 - 之后了解到了单元格自适应的方法,根据评论文字的
label
在Masonry
的约束限制下将单元格撑开。具体就是在设置评论文字label
的约束时,只设置top、bottom、left、right
,其中top
和bottom
的equal
对象得是上下被固定好的控件(也可以是单元格self
自身)。
[_contentLabel mas_makeConstraints:^(MASConstraintMaker* make) {
make.bottom.equalTo(_timeLabel.mas_top).offset(-20);
make.top.equalTo(_nameLabel.mas_bottom).offset(10);
make.left.equalTo(_nameLabel.mas_left);
make.right.equalTo(self.contentView.mas_right).offset(-20);
}];
- 写完后运行发现没有实现想要的效果,仔细查询发现,用Masonry的约束要放在
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier;
,我之前是单独将约束部分的代码都放在了- (void)layoutSubviews;
,因此没有达到想要的效果。 - 关于展开按钮的复用问题,当我点击展开一条长评回复时,向下滑动会发现另一条长评回复也会被自动打开,这时我知道了展开按钮的被选中状态被复用了。因此我单独创建了一个数组专门用来存放每一行单元格上展开按钮的选中状态,每次读取或者改变时都是从这个数组中取或者改,改正了被复用的问题。
使用FMDB实现收藏功能
什么是FMDB
- iOS中使用C语言函数对原生
SQLite
数据库进行增删改查操作,复杂麻烦,于是,就出现了一系列将SQLite
API封装的库,如FMDB
FMDB
是针对libsqlite3
框架进行封装的三方,它以OC的方式封装了SQLite
的C语言的API,使用步骤与SQLite
相似
在点击收藏按钮后,将该网页的id和文章标题和图片的URL存入数据库,取消收藏时,移出数据库即可