在启用滚动的情况下扩展堆栈视图内的 UITextView

2024-05-13

我正在尝试使用自动布局和 Stackview 来实现一些目标。我有一个垂直 Stackview,其中包含 UIView、UITextView 和 UIView,如下所示。

我已经在这里查看了以前的答案,但找不到一个干净的解决方案来实现此目的。

The UITextView是可编辑的,并且必须在用户输入时展开 - 为此,我已禁用滚动UITextView在国际文凭中。我还在 UITextView 上设置了高度约束,设置为“大于或等于”10,行数设置为 0,这样UITextView当用户键入时,获取运行时的固有高度。我还希望 UITextView 的扩展继续下去,直到UIStackView底部边缘到达键盘附件的顶部边缘。我已经在一定程度上实现了扩展UITextView我的堆栈视图固定到超级视图的顶部、尾部和前缘,但我不断收到错误stackview needs Y position or height这是可以理解的,但如果我给它一个固定的高度或底部约束,那么 UITextView 就不会扩展。

我也不确定当 UITextView 到达键盘附件视图的顶部边缘时如何停止它的扩展。

到目前为止我拥有的代码是

let allowedHeight = self.view.frame.height - (self.keyboardHeight! + self.accessory.frame.height)

基本上通过减去键盘高度+附件视图高度来找到视图框架中允许的高度。这个计算是正确的。接下来我这样做(在里面textViewDidChange)希望只是启用/禁用滚动UITextView可以,但显然不行,因为每次击键时整个文本视图都会奇怪地上下跳跃。

func textViewDidChange(_ textView: UITextView) {
   if stackView.frame.height >= allowedHeight{
            textView.isScrollEnabled = true
        }

   if stackView.frame.height < allowedHeight{
            textView.isScrollEnabled = false
        }
}

实现我想要做的事情的最佳方法是什么?


情侣笔记...

我认为你最好设置你的最大高度UITextView而不是你的UIStackView。文本视图将根据其内容扩展/收缩,因此您可以设置<=高度限制。

计算“elementsHeight” - 顶部和底部视图使用的垂直尺寸,加上任何间距 - 并将“最大文本视图高度”设置为视图高度减去 elementsHeight ...并减去可见时的键盘高度。

当“最大文本视图高度”更改时,更新文本视图的高度约束常量。

然后为文本视图设置一个观察者.contentSize...并基于启用/禁用滚动.contentSize.height与“最大文本视图高度”相比。

需要一些跳跃,以确保在布局子视图时更新大小,并确保不会陷入递归循环。

我是这样设置的:

文本视图的初始高度约束是<= 40- 但这并不重要,因为每次视图布局不同时都会通过代码进行更改。

我在 GitHub 上放了一个示例——它可以工作,但实际上只是一个起点。有兴趣的话可以看看,然后拆开看看。https://github.com/DonMag/ExpandingTextView https://github.com/DonMag/ExpandingTextView

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在启用滚动的情况下扩展堆栈视图内的 UITextView 的相关文章

随机推荐

  • Git 命令显示我对给定远程的权限

    同事可以从远程存储库获取数据 但不能推送到远程存储库 我怀疑他对遥控器只有读权限而没有写权限 我可以通过多种方法来检查这一点 但我想不出他可以在 git 中使用的方法 是否有 git 命令可以显示给定远程存储库的权限 No Git 本身不处
  • 将可渲染节点(相同的旋转、位置和比例)替换为 Sceneform sdk 中的另一个可渲染节点

    我是 Android 版 sceneform sdk 的新手 我已经添加了一个Transformable Node 然后我应用了一些旋转 缩放并改变了它的位置 现在 单击按钮后 我需要放置具有相同旋转 缩放和位置的第二个节点 为此我所做的是
  • 使用 scikit 包在 Python 中绘制集群区域的边界

    这是我处理 3 个属性 x y 值 中的数据聚类的简单示例 每个样本代表其位置 x y 及其所属变量 我的代码发布在这里 x np arange 100 200 1 y np arange 100 200 1 value np random
  • 找不到模块:无法解析 @google-cloud/storage 上的“fs”

    得到Module not found Can t resolve fs 尝试从 GCP Storage 列出存储桶时出错 import Storage from google cloud storage const googleCloud
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • 实施材质主题时遇到问题

    我在用this http antonioleiva com material design everywhere 作为在 Android 5 0 之前的设备上向现有应用程序实施 Material 主题的教程 我的问题是我得到了Null Po
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • 带有安全 Kafka 抛出的 Spark 结构化流:无权访问组异常

    为了在我的项目中使用结构化流 我正在 hortonworks 2 6 3 环境上测试 Spark 2 2 0 和 Kafka 0 10 1 与 Kerberos 的集成 我正在运行下面的示例代码来检查集成 我能够在 Spark 本地模式下的
  • Spring 中的声明式或编程式事务

    在Spring中我们应该使用什么类型的事务管理策略 声明式还是程序式 哪一种更好 在什么情况下应该使用它 你能给出任何适当的例子或教程吗 还想知道在spring写数据库代码时最新应该使用什么东西 HibernateTemplate 的替代方
  • 自动铸造[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我现在正在遭受脑放屁的痛苦 我以前曾经这样做过 但我不记得确切的语法 也无法查看我编写的代码 因为我当时在另一家公司工作 我有这样的安排 class
  • 谷歌表格根据今天的日期隐藏行

    在 Google Sheets 中 当 A 列中的日期等于或早于今天的日期时 我需要一个脚本来自动隐藏工作表 1 中的行 因此 如果今天是 2018 年 8 月 29 日 单元格 A3 中的日期是 2018 年 8 月 28 日 则第 3
  • 单元测试内存泄漏

    我有一个应用程序存在大量内存泄漏 例如 如果打开一个视图并关闭它 10 次 我的内存消耗会增加 因为视图没有完全清理 这些是我的内存泄漏 从测试驱动的角度来看 我想编写一个测试来证明我的泄漏 并 在修复泄漏之后 断言我修复了它 这样我的代码
  • php循环中的ajax在按钮单击时执行操作

    所以我有一个 php 循环 我使用 jquery 滑动切换来隐藏 显示带有 sql 结果的表 目前该表仅使用 php 加载 但由于发生了很多事情 导致了一些加载问题 我需要使用滑动切换 btn 来触发 ajax 因此它仅在按下按钮时请求当前
  • 24位整数

    为了检查一些银行帐号 我想对帐号进行模 97 但是很多帐号太大而无法输入 UInt64 如何对 24 位整数进行运算 Thanks 示例代码 无法转换 Convert ToUInt64 756842356987456214536254 97
  • 如何使用 ui-router 中的 ui-sref 将参数传递给控制器

    我需要传递和接收两个参数到我想要转换到的状态ui srefui router 的 例如使用下面的链接将状态转换为home with foo and bar参数 a Go to home state with foo and bar para
  • ICollection 和 IReadOnlyCollection 的扩展方法

    我想写一个扩展方法 例如 IsEmpty 对于 ICollection 和 IReadonlyCollection 接口 public static bool IsEmpty
  • Java 套接字 - 读和写

    问题 客户端没有收到任何消息 这是客户端和服务器的完整代码 CLIENT public class Client extends Socket public Client String hostName int port throws Un
  • 从 C# 调用非托管 dll。拿2

    我编写了一个 C 程序 它调用一个 C DLL 将命令行参数回显到文件中 当使用 rundll32 命令调用 c 时 它显示命令行参数没有问题 但是当从 c 内部调用它时 它不会显示 我问了这个问题 https stackoverflow
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • 在启用滚动的情况下扩展堆栈视图内的 UITextView

    我正在尝试使用自动布局和 Stackview 来实现一些目标 我有一个垂直 Stackview 其中包含 UIView UITextView 和 UIView 如下所示 我已经在这里查看了以前的答案 但找不到一个干净的解决方案来实现此目的