UITextView 高度在键入/不使用故事板时动态更改

2023-11-23

我有这个 UITextView & 我希望它的高度在用户在其上打字时动态变化。我想以编程方式完成它。我的 UITextView 位于另一个 UIView 之上。约束条件设置如下:

 addtextview.leadingAnchor.constraint(equalTo: addtasktextview.leadingAnchor, constant: 8).isActive = true
      addtextview.trailingAnchor.constraint(equalTo: addtasktextview.trailingAnchor, constant: -8).isActive = true
      addtextview.topAnchor.constraint(equalTo: addtasktextview.topAnchor, constant: 8).isActive = true
      addtextview.bottomAnchor.constraint(equalTo: addtasktextview.bottomAnchor, constant: -40).isActive = true

有趣的是,我也在 tableViewCells 中使用 textview,并通过仅使用此约束方法动态更改高度,但在这里它不起作用。 我希望文本视图的高度以向上移动的方式增加。因此,当新行开始时,顶部应移动以保持下方的间距。

我该怎么做?帮助将不胜感激。

enter image description here

更新:我能够让它与下面 @upholder-of-truth 的答案一起工作。我还能够通过查找 textview 正常高度和 newSize.height 之间的差异,然后将该差异添加到容器的高度来动态更改父 UIView 容器高度。


首先确保您的类采用 UITextViewDelegate 协议,以便您可以在文本更改时收到通知,如下所示:

class MyClass: UIViewContoller, UITextViewDelegate

接下来在类中的某个位置定义此变量,以便您可以跟踪约束中的高度:

var textHeightConstraint: NSLayoutConstraint!

接下来添加以下约束并激活它:

    self.textHeightConstraint = addtextview.heightAnchor.constraint(equalToConstant: 40)
    self.textHeightConstraint.isActive = true

(如果您不在 viewDidLoad 中执行此操作,则需要将 textHeightConstraint 设置为可选)

接下来订阅委托(如果尚未完成):

addTextView.delegate = self

添加此函数来重新计算高度约束:

func adjustTextViewHeight() {
    let fixedWidth = addtextview.frame.size.width
    let newSize = addtextview.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
    self.textHeightConstraint.constant = newSize.height
    self.view.layoutIfNeeded()
}

接下来,在创建约束后添加对该函数的调用以设置初始大小:

self.adjustTextViewHeight()

最后添加此方法以在文本更改时调整高度:

func textViewDidChange(_ textView: UITextView) {
    self.adjustTextViewHeight()
}

为了以防万一,这里有一个 UIViewController 子类中的最小示例:

class ViewController: UIViewController, UITextViewDelegate {
    @IBOutlet var textView: UITextView!
    @IBOutlet var textHolder: UIView!

    var textHeightConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        textView.leadingAnchor.constraint(equalTo: textHolder.leadingAnchor, constant: 8).isActive = true
        textView.trailingAnchor.constraint(equalTo: textHolder.trailingAnchor, constant: -8).isActive = true
        textView.topAnchor.constraint(equalTo: textHolder.topAnchor, constant: 8).isActive = true
        textView.bottomAnchor.constraint(equalTo: textHolder.bottomAnchor, constant: -40).isActive = true

        self.textHeightConstraint = textView.heightAnchor.constraint(equalToConstant: 40)
        self.textHeightConstraint.isActive = true

        self.adjustTextViewHeight()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func textViewDidChange(_ textView: UITextView) {
        self.adjustTextViewHeight()
    }

    func adjustTextViewHeight() {
        let fixedWidth = textView.frame.size.width
        let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
        self.textHeightConstraint.constant = newSize.height
        self.view.layoutIfNeeded()
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITextView 高度在键入/不使用故事板时动态更改 的相关文章

  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • 快速球体结合星数据

    我想构建一个观星应用程序 现在我已经构建了一个球体并用星图覆盖它 基于天体坐标 https svs gsfc nasa gov cgi bin details cgi aid 3895 https svs gsfc nasa gov cgi
  • Obj-C / Swift 项目中的致命陷阱异常

    我开始将 Swift 代码集成到我的 Obj C 项目中 一切都进展顺利 但今天 当我更新到 Xcode 6 1 时 事情变得很糟糕 我从之前运行良好的 Swift 代码中收到了许多 陷阱 异常 第一次崩溃位于我的 UIFont 扩展中 这
  • 我可以指定泛型是值类型吗?

    我知道我们基本上可以通过使用指定我们的泛型是任何引用类型AnyObject class Foo
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • Firestore 读取包含子集合的文档的计费

    我正在制作一个应用程序 它存储用户使用我的应用程序学习了多少分钟 我的 Firestore 数据库以 用户 集合开始 每个用户都有自己的文档 该文档由其在 Auth 中生成的 userID 命名 我的问题是 如果我读取了他们的 userID
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Facebook iOS SDK:登录 Facebook 时无需总是询问应用程序的权限

    我在我的应用程序中使用 Facebook iOS SDK 我有两个类似的问题 有没有办法知道当前是否有用户登录 我现在使用的是在成功登录时存储访问令牌和到期日期 并在应用程序启动时加载它们 我的问题是 如果会话无效 我可以为用户提供登录选项
  • 有没有办法检测 iOS 设备进入睡眠模式(屏幕变黑时)时的事件?

    我想检测两个事件 设备被锁定 解锁 设备进入睡眠状态并且屏幕变黑 我在这里实现的第一个目标是 有没有办法检查 iOS 设备是否锁定 解锁 https stackoverflow com questions 14229955 is there
  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 在 macOS 上通过 Apache 本地运行 Xcode DocC 文档

    Xcode 13 的 DocC 文档档案可以使用自定义 Apache 托管 htaccess文件中描述的向外部开发人员分发文档 https developer apple com documentation xcode distributi
  • iOS AFNetworking downloadProgressBlock 计算返回负数

    我正在使用 AFNetworking 下载使用第三方类解析的数据 我之前曾多次使用 AFNetworking 执行类似的操作 但由于某种原因 当我调用 downloadProgressBlock 并进行计算以与我的进度条一起使用时 数字返回
  • 每次 UIScrollView 释放时都会发生内存泄漏

    在我的应用程序中 我有一个滚动视图和四个表格视图 每次拖动然后释放时 我都会泄漏 48 字节 这确实很重要 正如您所看到的 两组泄漏都有相同的来源 有人见过这样的泄漏吗 Edit 1 当我单击泄漏旁边的箭头时 我会得到泄漏的以下信息 您所看
  • 如何在 iOS Swift 中获取来电的电话号码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我的应用程序中获取来电者的电话号码 请有人迅速为我提供这个问题的解决方案 您将永远无法获得来电的电话号码 因为这是用户的私人数据
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • AudioPlayer 和锁屏/控制中心控制 Swift [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我是斯威夫特的新手 我写信是因为我想问一个问题 我和我的朋友正在开发一个音频播放器 但我们遇到了问题 播放器还可以在后台
  • 将文本拆分为数组,同时保留 Swift 中的标点符号

    我想将文本拆分为一个数组 保持标点符号与其余单词分隔开 因此字符串如下 Hello I am Albert Einstein 应该变成这样的数组 Hello I am Albert Einstein 我尝试过sting components
  • 应用程序被终止时是否会收到 iOS 静默通知

    当发送后台推送时 content available 1 对于被用户杀死的应用程序 该应用程序不会启动到后台模式 并且application didReceiveRemoteNotification fetchCompletionHandl

随机推荐

  • gridview rowCommand 中的行索引

    只是想将值从变量转移到另一个变量 protected void gvVariableDetail RowCommand object sender GridViewCommandEventArgs e if e CommandName Ed
  • XNA 和 GUI 控件(例如 xaml 和 xna)

    有没有办法在 xna 中获取支持边距等的文本框 标签和其他 wpf 控件 并根据窗口大小进行伸缩 你可能会给CeGui a shot 如果您的游戏需要高级 GUI 功能 CeGui 可能正好适合您 撇开市场因素不谈 这是一个非常好的 GUI
  • AlarmManager 在 Android 4.4.2 中停止工作(使用 SetExact())

    我在代码中设置了一个在特定时间响起的闹钟 警报机制在 SDK 这是我设置闹钟的代码 public void SetAlarm Context context Long executionTime AlarmManager am AlarmM
  • 让 Git 使用代理服务器 - 失败并显示“请求超时”

    如何让 Git 使用代理服务器 我需要从 Git 服务器检查代码 但每次都显示 请求超时 我该如何解决这个问题 或者 如何设置代理服务器 使用的命令 git config global http proxy http proxyuser e
  • 有多少用户连接到我的 Shiny 应用程序?

    我正在开发一个闪亮的应用程序shinydashboard在应用程序的某个地方 我想显示一条通知 告诉用户有多少其他用户同时连接到该应用程序 我想出了第一段似乎有效的代码 library shiny ui fluidPage uiOutput
  • 单元测试插入/更新/删除

    我用谷歌搜索了一下 并没有真正找到我需要的答案 我正在为客户使用 C SQL Server 和 LINQ 开发一个网页 我希望用户能够互相发送消息 所以我所做的是使用实际进入数据库的数据对其进行单元测试 问题是我现在依赖于至少有 2 个我知
  • PowerShell v5 - 如何将模块安装到没有互联网连接的计算机上?

    我有一台机器 v3 互联网 无管理员访问权限 我用它下载 WMF 5 0 并设置另一台机器 v5 无互联网 管理员访问权限 现在 我想在运行 v5 但没有互联网连接的计算机上使用 PowerShellGet 中的一些模块 我需要一个选项来下
  • 如何修复 iOS Firestore Increment() 上的错误“‘增量’的使用不明确”

    我在尝试使用 firebase 时收到编译器错误FieldValue increment 1 在 iOS 中使用 swift 该错误仅表示 增量 的使用不明确 我已将所有 pod 更新为所使用的所有 firebase pod 的当前版本 更
  • FFMPEG:使用绘图文本以及自动换行和填充创建视频

    我正在努力使用绘图文本过滤器从文本创建视频 输出视频我可以看到文本溢出而不是换行 有什么方法可以存档自动换行并将内部填充设置为视频 下面是我用来从文本生成视频的片段 ffmpeg exe f lavfi i color c white s
  • 在 numpy 数组中相乘

    我试图将二维数组中的每个项乘以一维数组中的相应项 如果我想将每一列乘以一维数组 这非常容易 如下所示numpy 乘法功能 但我想做相反的事情 将行中的每一项相乘 换句话说 我想乘以 1 2 3 0 4 5 6 1 7 8 9 2 and g
  • 如何在 Rails 6 中执行自定义 JavaScript 函数

    随着 Webpacker 引入 Ruby On Rails 我找不到使用 JavaScript 函数的方法 我有一个名为app globals js具有要测试的功能 function alerts alert TEST 然后我想在我的观点之
  • Codeigniter:ORDER BY CASE 查询出错

    这是我的查询代码点火器 this gt db gt select p u firstname u lastname s title AS industry pt type name al length value FALSE this gt
  • Firemonkey 中的 Cleartype 字体/文本渲染

    下面是一个仅包含 TEdit 控件的示例 VCL 应用程序 如果您编译类似的 Firemonkey FMX 应用程序 您会注意到这一点 小L字母疯狂地跳来跳去 根据我的研究我发现thisG 帖子的结果是 如您所见 结果更好 跳跃消失了 然而
  • 如何在一定时间后删除MySQL记录

    我想在 7 天后从 MySQL 数据库中删除一些消息 我的消息表行具有以下格式 编号 留言 日期 日期是正常格式的时间戳 2012 12 29 17 14 53 我认为 MySQL 事件将是替代 cron 作业的方法 对于经验丰富的 SQL
  • 在 C++ 中将宽字符字符串转换为小写

    如何在 C 中将 wchar t 字符串从大写转换为小写 该字符串包含日语 中文 德语和希腊字符的混合体 我想过用塔罗 http msdn microsoft com en us library 8h19t214 28VS 80 29 as
  • Android 棒棒糖工具栏在打开/关闭抽屉和后退按钮之间切换

    我有标准导航抽屉 但现在我正在尝试使用工具栏修改它 早些时候我的代码看起来像 MainActivity java Override protected void onCreate Bundle savedInstanceState supe
  • 从 TensorFlow 图中删除 dropout 操作

    我有一个经过训练的冻结图 我正在尝试在 ARM 设备上运行它 基本上 我使用 contrib pi examples label image 但使用我的网络而不是 Inception 我的网络接受了 dropout 训练 这现在给我带来了麻
  • 无法在 Windows 8 上使用 SetSystemTime 设置时钟

    我的应用程序使用SetSystemTime 从 GPS 源设置 PC 时钟 这在禁用用户帐户控制的 Windows 7 中工作正常 但在 Windows 8 中 即使禁用 UAC 它也会失败 我得到的错误是ERROR PRIVILEGE N
  • 压缩和解压缩流

    我发现这篇关于用JAVA实现简单代理服务器的文章 http www java2s com Code Java Network Protocol Asimpleproxyserver htm 该代码只是从客户端获取一些流 然后将其发送到服务器
  • UITextView 高度在键入/不使用故事板时动态更改

    我有这个 UITextView 我希望它的高度在用户在其上打字时动态变化 我想以编程方式完成它 我的 UITextView 位于另一个 UIView 之上 约束条件设置如下 addtextview leadingAnchor constra