仿写知乎日报第三周

news2024/12/25 1:13:06

新学到的

本周新学习了FMDB数据库,并对Masonry的使用有了更近一步的了解,还了解了cell的自适应高度

  • FMDB数据库的介绍和使用:iOS——FMDB的介绍与使用

cell自适应高度和Mansonry自动布局

本周写了评论区,在写评论区的时候,学到了cell的自适应高度。首先是要将tableView的rowHeight属性设置为UITableViewAutomaticDimension,这样就可以使cell自动适应cell内容的高度。如下:

        self.pingLunView.tableView.rowHeight = UITableViewAutomaticDimension;

然后要对cell中的控件位置使用Masonry自动布局。因为这个cell自适应高度是要依靠cell中的内容的布局的,相当于靠cell中内容的大小将cell撑大。因此在cell中的Masonry布局中,我们只要设置控件的left、right、top、bottom即可,要注意这块一定要把布局设置合理了,我在写布局的时候两个控件的布局发生冲突,程序虽然没崩但是一直报警告。代码实现如下:

    [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView).offset(70);
        make.top.equalTo(self.contentView).offset(10);
        make.width.equalTo(@(self.contentView.bounds.size.width - 90));
        make.height.equalTo(@30);
    }];
    
    [self.pingLunLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.nameLabel.mas_left);
        make.top.equalTo(self.nameLabel.mas_bottom).offset(10);
        make.right.equalTo(self.contentView.mas_right).offset(-20);
        make.bottom.equalTo(self.replylabel.mas_top).offset(-10);
    }];
    
    [self.dianZanButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView.mas_right).offset(-60);
        make.top.equalTo(self.contentView.mas_bottom).offset(-30);
        make.right.equalTo(self.contentView.mas_right).offset(-30);
        make.bottom.equalTo(self.contentView.mas_bottom).offset(-30);
    }];
    
    [self.replylabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.pingLunLabel.mas_left);
        make.top.equalTo(self.pingLunLabel.mas_bottom).offset(10);
        make.right.equalTo(self.pingLunLabel.mas_right);
        make.bottom.equalTo(self.contentView.mas_bottom).offset(-50);
    }];

使用FMDB本地存储数据

在实现本地持久化时,我用到了FMDB。首先我在收藏的功能中使用了FMDB,具体用法是在收藏的Model层中写了FMDB的相关方法,在显示具体页面的部分有收藏按钮,如果点击了收藏按钮,就将当前页面的id、url、title、hint、image属性以及收藏和点赞的BOOL值使用FMDB的增加方法加入数据库,反之如果取消收藏按钮,就将该数据删除。然后在收藏的tableView中将FMDB中的数据放入cell中,就可以完成收藏的本地持久化。
在从数据库中查找数据的方法,我返回的是一个数组,这个数组中存放着字典。

- (NSArray*)findDataWithChoice: (BOOL) isurl{
    if ([self.collectionDatabase open]) {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        if (isurl == YES) {
            FMResultSet *resultSet = [self.collectionDatabase executeQuery:@"SELECT * FROM collectionData"];
            while ([resultSet next]) {
                NSString *url = [resultSet stringForColumn:@"url"];
                NSString *idstr = [resultSet stringForColumn:@"id"];
                NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: idstr, @"ID", url, @"url", nil];
                [array addObject:dict];
            }
            [self.collectionDatabase close];
            return array;
        } else {
            FMResultSet *resultSet = [self.collectionDatabase executeQuery:@"SELECT * FROM collectionData"];
            while ([resultSet next]) {
                NSString *titleStr = [resultSet stringForColumn:@"title"];
                NSString *hintStr = [resultSet stringForColumn:@"hint"];
                NSString *imageStr = [resultSet stringForColumn:@"image"];
                NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:titleStr, @"title", hintStr, @"hint", imageStr, @"image", nil];
                [array addObject:dict];
            }
            [self.collectionDatabase close];
            return array;
        }
    }
    return nil;
}

对之前写的内容的优化修改

在一开始写评论区的时候,头像的获取的图片的请求我是放在cell中的,导致每当出现cell出现和消失的时候都会再次请求一遍头像,因此我修改为将请求的头像放在一个数组中再赋值,就可以让cell只请求一遍,不会反复请求。

效果图

评论区:
在这里插入图片描述
在这里插入图片描述
收藏:
在这里插入图片描述

还有问题的地方

评论区的折叠展开评论功能,因为获取label的高度还有问题,因此还没有完成
收藏功能因为收藏顺序和加入数据库的顺序相反,因此在左右滑动收藏的页面时有bug
点赞和收藏的状态还没有写完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1174280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebSocket Day02 : 握手连接

前言 握手连接是WebSocket建立通信的第一步,通过客户端和服务器之间的一系列握手操作,确保了双方都支持WebSocket协议,并达成一致的通信参数。握手连接的过程包括客户端发起握手请求、服务器响应握手请求以及双方完成握手连接。完成握手连接后…

非线性【SVM】的创建和使用

先来绘制散点图: from sklearn.datasets import make_circles X,y make_circles(100, factor0.1, noise.1) # 100个样本,factor:内圈和外圈的距离之比,noise:噪声 X.shape y.shape plt.scatter(X[:,0],X[:,1],cy,s50,cmap"rainbow&qu…

Python基础入门例程44-NP44 判断列表是否为空(条件语句)

最近的博文: Python基础入门例程43-NP43 判断布尔值(条件语句)-CSDN博客 Python基础入门例程42-NP42 公式计算器(运算符)-CSDN博客 Python基础入门例程41-NP41 二进制位运算(运算符)-CSDN博客…

【斗罗二】木槿被打脸,二级魂导师反击木槿,霍雨浩遭遇挖墙角

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料,《斗罗大陆2绝世唐门》21集最新内容,新生考核结束后,戴华斌的内心对霍雨浩的怨念并没有随着时间的流逝而消散,反而像燎原之火一样越演越烈。他始终耿耿…

UE5——源码阅读——1

UE启动 hInInstance :项目实例 hPrevInstance:项目上一个实例 pCmdLine:参数 nCmdShow:窗口显示 TRACE_BOOKMARK(TEXT(“WinMain.Enter”));:UE用来追踪记录的函数,用于标记应用程序在执行过程中一些特定的…

初识rust

调试下rust 的执行流程 参考: 认识 Cargo - Rust语言圣经(Rust Course) 新建一个hello world 程序: fn main() {println!("Hello, world!"); }用IDA 打开exe,并加载符号: 根据字符串找到主程序入口: 双击…

设计模式_策略模式

策略模式 介绍 设计模式定义案例问题堆积在哪里解决办法策略模式对算法进现封装,抽象 如:IF elseIF 一大堆 可以配合工厂模式使用炼丹炉里做饭 要求 菜谱 和 食材可配置问题在可配置 菜谱封装菜谱 然后抽象菜谱,为了统一使用方法 类图 Cai…

初阶JavaEE(14)表白墙程序

接上次博客:初阶JavaEE(13)(安装、配置:Smart Tomcat;访问出错怎么办?Servlet初识、调试、运行;HttpServlet:HttpServlet;HttpServletResponse)-C…

Navicat15更改字体后中文注释显示问题解决办法

Navicat中文注释显示问题解决办法 解决办法: 1 2 3

网络验证码--你到底是爱它还是恨它?

互联网安全防火墙(1)--网络验证码的科普 1 戏言部分 为了在网络上吸引大家读这个文章,在想标题的时候,也是够了。本来是严肃的科普学术帖,但是却一股强烈的“不转不是中国人,让男孩沉默女孩流泪” 这种…

【Mybatis小白从0到90%精讲】05:Mybatis新增(insert),要掌握的点位,都在这里

文章目录 前言一、编写Mapper二、编写 Mybatis 工具类三、看效果总结前言 身为半自动ORM的Mybaits, 其在查询方面支持任意SQL, 表现出色,那么它在新增insert 方面表现又如何呢? 今天我们来实战 Mybatis新增(insert) 操作,看看它的表现是不是依然出色? 在讨论新增数据时,…

分享88个节日庆典PPT,总有一款适合您

分享88个节日庆典PPT,总有一款适合您 PPT下载链接:百度网盘 请输入提取码 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付费甚欢喜,为咱码农谋福利…

1.Java Stream 流操作

概念 Stream把将要处理的集合中的元素进行流式化处理 ,在流式化处理过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 Stream 的操作符大体上分为两种:中间操作符和终止操作符 中间操作符 对于…

【10套模拟】【1】

关键字: 快排空间复杂度、算法目标、广义表与树、后缀表达式、AOV网、完全图、子表

java代码检查

jacoco 引入依赖 <dependencies><dependency><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.7</version></dependency><dependency><groupId>org.springframew…

2023-2024 中国科学引文数据库来源期刊列表(CSCD)

文章目录 CSCD来源期刊遴选报告2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09; CSCD来源期刊遴选报告 2023-2024 中国科学引文数据库来源期刊列表&#xff08;CSCD&#xff09;

【Mybatis小白从0到90%精讲】01:IDEA创建Maven项目,添加Mybatis依赖

文章目录 前言一、IDEA创建Maven项目二、添加依赖前言 Mybatis开发,我们从创建一个Maven项目项目开始,推荐使用的开发工具是IDEA,接下来演示使用IDEA创建Maven项目,并添加Mybatis依赖,每一步对应都有配图,Let’s Go~ 一、IDEA创建Maven项目 打开IDEA,点击左上角菜单:F…

基于java+springboot+vue的校园出入管理系统

项目介绍 本论文主要论述了如何使用JAVA语言开发一个校园出入管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园出入管理系统的当前背景以及系统开…

挑战100天 AI In LeetCode Day01(2)

挑战100天 AI In LeetCode Day01&#xff08;2&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-22.1 题目2.2 题解 三、面试经典 150 题-23.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&#xff0c;面向程序…

基于SSM的教学管理系统(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的教学管理系统&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc My…