UITextView删除原有字符串时,光标会上移并且光标会变高
代码运行效果如图:


import Foundationclass TestVC: UIViewController {override func viewDidLoad() {super.viewDidLoad()let testV = MyCustomTextView(frame: CGRect(x: 0, y: 130, width: SCREEN_WIDTH - 50, height: 170))self.view.addSubview(testV)testV.backgroundColor = .darkGraylet ps = NSMutableParagraphStyle()ps.lineSpacing = 7ps.alignment = .leftlet attr = NSMutableAttributedString(string: "字", attributes: [.font: UIFont.systemFont(ofSize: 20),.foregroundColor: UIColor.blue,.paragraphStyle: ps.copy()])testV.attributedText = attr}
}extension TestVC: UITextViewDelegate {func textViewDidChange(_ textView: UITextView) {let text = textView.text ?? ""let ps = NSMutableParagraphStyle()ps.lineSpacing = 7ps.alignment = .leftlet attr = NSMutableAttributedString(string: text, attributes: [.font: UIFont.systemFont(ofSize: 20),.foregroundColor: UIColor.blue,.paragraphStyle: ps.copy()])textView.attributedText = attr}
}class MyCustomTextView: UITextView {override func caretRect(for position: UITextPosition) -> CGRect {var rect = super.caretRect(for: position)var text = self.text// 计算字符串为空时的textView rect, 避免删完字符串时出现的光标变高和上移问题// 如果自己还要做换行效果, 那么只在self.text.isEmpty时用sizeToFitif self.text.isEmpty {// 用"AAgg"可以算出字符串最大高度, 因为一个往上占据位置, 一个往下占据位置.text = "AAgg"}let label = UILabel()label.font = self.fontlabel.text = textlabel.sizeToFit()rect.size.height = label.heightreturn rect}
}
相关文章:
UITextView删除原有字符串时,光标会上移并且光标会变高
代码运行效果如图: import Foundationclass TestVC: UIViewController {override func viewDidLoad() {super.viewDidLoad()let testV MyCustomTextView(frame: CGRect(x: 0, y: 130, width: SCREEN_WIDTH - 50, height: 170))self.view.addSubview(testV)testV.ba…...
python入门 介绍及变量的使用
1.python介绍 python 是一门计算机语言 常见的计算机语言:python、java、C语言。。。 什么是计算机语言:就是让计算机知道你想干什么,把你的需求使用它能听懂的语言说出来 中国也有一门计算机语言:易语言 能认为是语言的本质上…...
51单片机-按键
1、独立按键 1.1、按键介绍 轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。 1.2、独立按键原理 按键在闭合和断开时,触点会存在抖动现象。P2\P3\P1都是准双向IO口,…...
Java 8 至 Java 23 版本特性对比表
Java现在发布的版本很快,每年两个,但是真正会被大规模使用的是三年一个的TLS版本。 版本年份LTS关键特性影响力等级Java 82014✅Lambda 表达式、Stream API、方法引用、接口默认方法、Optional 类⭐⭐⭐⭐⭐Java 92017❌模块化系统(JPMS&…...
在wsl环境中配置和开发verilog(一种比较新颖的verilog开发指南)
WSL是windows中自带的linux子系统,笔者在若干月前首次接触其便爱不释手,verilog作为一种硬件解释语言,可否像c语言那样被游刃有余的编译和运行呢,笔者这次大胆的尝试在WSL环境VSCODEIverilog开发verilog。 首先默认按照了WSL和VS…...
AI学习指南HuggingFace篇-Hugging Face 的核心工具
一、引言 Hugging Face作为AI领域的重要参与者,提供了许多强大的工具,极大地简化了自然语言处理(NLP)任务的开发流程。其中,Transformers、Datasets 和 Tokenizers 是Hugging Face的三大核心工具。本文将深入介绍这些工具的作用、功能以及它们如何相互配合,帮助读者更好…...
DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,压缩进度
前言 最近在做项目时遇到一个需求,需要将升级的文件压缩成zip,再进行传输; 通过网络调研,有许多方式可以实现,例如QT私有模块的ZipReader、QZipWriter;或者第三方库zlib或者libzip或者quazip等࿱…...
深入解析桥接模式:软件设计中的解耦利器
桥接模式:软件设计中的解耦利器 在软件开发的复杂世界中,设计模式是开发者解决常见问题的有力工具。桥接模式作为一种重要的结构型设计模式,在处理抽象与实现的关系时展现出独特的优势,它能够巧妙地将抽象部分与实现部分分离&…...
MYSQL-数据库-DDL-DML-DQL-DCL-基础学习
MySql概念: 建立在关系模型基础上,有多张相互连接的二维表组成的数据库 SQL通用语法: 1.SQL语句可以单行或多行书写,以分号结尾 2.SQL语句可以使用空格/缩进来增强语句的可读性 3.MySQL数据库的SQL语句不区分大小写,关…...
rv1126解码的一些原理
rv1126解码篇中,出现最重要的两个api一个是,send_vdec_thread线程里面调用的RK_MPI_SYS_SendMediaBuffer,把数据发到解码器。另外一个是read_vdec_thread线程的RK_MPI_SYS_GetMediaBuffer获取解码器里面的数据。 今天想探讨一下他的底层原理。…...
二级公共基础之数据结构与算法篇(七)排序技术
目录 前言 一、交换类排序 1.冒泡排序法 1. 冒泡排序的思想 2. 冒泡排序的实现步骤 3. 示例 4. 冒泡排序的特点 2.快速排序 1. 快速排序的核心思想 2. 快速排序的实现步骤 3. 示例代码(C语言) 4. 快速排序的特点 二、插入类排序 1. 简单插入排序 1.简单插入排…...
深蕾科技智能多媒体SoC产品助力“DataEye剧查查之夜”微短剧盛会
深蕾科技助力微短剧盛会 深圳湾“DataEye剧查查之夜”微短剧盛会,于2025年2月20日18:00点,在深圳湾盛大开启。作为第十四届中国国际新媒体短片节的重要组成部分,“剧查查之夜”汇聚了微短剧行业的顶尖力量,吸引了众多大咖齐聚一堂…...
Apache Doris 实现毫秒级查询响应
1. 引言 1.1 数据分析的重要性 随着大数据时代的到来,企业对实时数据分析的需求日益增长。快速、准确地获取数据洞察成为企业在竞争中脱颖而出的关键。传统的数据库系统在处理大规模数据时往往面临性能瓶颈,难以满足实时分析的需求。例如,一个电商公司需要实时监控销售数据…...
计算机考研之数据结构:P 问题和 NP 问题
在算法的时间复杂度估算中,通常教材和题目中的估算结果包括: O ( 1 ) , O ( log n ) , O ( n ) , O ( n ) , O ( n log n ) , O ( n 2 ) , O ( n 3 ) , O ( log log n ) O(1),O(\log{n}),O(\sqrt{n}),O(n),O(n\log{n}),O(n^2),O(n^3),O(\log…...
新数据结构(13)——I/O
字符流 字符输入流(Reader) 字符输入流用于从数据源(如文件、字符串等)读取字符数据。Reader 是所有字符输入流的抽象基类。 常用实现类 FileReader 用于从文件中读取字符数据。 InputStreamReader 将字节流转换为字符流&…...
PySide6学习专栏(四):用多线程完成复杂计算任务
如果计程序中要处理一个非常庞大的数据集中的数据,且数据处理计算很复杂,造成数据处理占用大量时间和CPU资源,如果不用多线程,仅在主进程中来处理数据,将会使整个程序卡死,必须采用多线程来处理这些数据是唯…...
Python多线程编程理解面试题解析
一、多线程介绍 Python 的多线程是一种实现并发编程的方式,允许程序同时执行多个任务。然而,由于 Python 的全局解释器锁(GIL)的存在,多线程在某些场景下可能无法充分利用多核 CPU 的性能。以下是对 Python 多线程的理…...
Flutter - 初体验
项目文件目录结构介绍 注:创建 Flutter 项目名称不要包含特殊字符,不要使用驼峰标识 // TODO 开发中运行一个 Flutter 三种启动方式 Run 冷启动从零开始启动Hot Reload 热重载执行 build 方法Hot Restart 热重启重新运行整个 APP 先看效果,…...
使用最广泛的Web应用架构
目前互联网中没有一种绝对使用最广泛的Web应用架构,不同的架构在不同的场景和企业中都有广泛应用,但微服务架构和Serverless架构是当前较为主流和广泛使用的架构。以下是对这两种架构的具体分析: 微服务架构 适用场景广泛 大型互联网公司&a…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
