从 SwiftUI 中的 UIKit 更新 UIViewRepresentable 大小

2023-11-25

我正在嵌入一个高度可变的视图控制器UITextView在父 SwiftUI VStack 中,视图控制器将其框架调整为整个屏幕viewDidLoad and viewDidLayoutSubviews. The UITextView仅扩展到其自身内部文本的大小,并将其自身置于父视图中的中心。

我正在尝试在 VStack 中添加此视图控制器,并使其在外部表现得像其他 SwiftUI 组件一样 - 大小与它包含的内容完全一致 - 但它希望调整大小为整个屏幕减去其他 VStack 元素。

我可以获得正确的尺寸UITextView in didLayoutSubviews并将其向上传递到 SwiftUI,在那里可以正确设置它 - 但我在哪里可以做到这一点?

在下面的示例屏幕截图中,橙色是嵌入的UIView背景,绿色的是UITextViewVStack 看起来像这样:

    VStack {
        HighligherVC()
        Text("Tap and drag to highlight")
            .foregroundColor(.gray)
            .font(.caption)
    }

example of the parent uiview expanding to be too high


如果无法看到更多代码,很难说出最好的解决方案是什么,但纯粹基于问题的这一部分......

我可以在 didLayoutSubviews 中获取 UITextView 的正确大小,并将其向上传递到 SwiftUI,在那里可以正确设置它 - 但我在哪里可以做到这一点?

我建议您将绑定属性传递给视图控制器,该属性可以设置为计算出的文本视图高度,这意味着包含您的视图的视图VStack会有一个@State像这样的属性:

@State private var textViewHeight: CGFloat = 0

然后你会声明一个@Binding您的财产HighlighterVC并添加一个像这样的初始化程序:

@Binding var textViewHeight: CGFloat

init(textViewHeight: Binding<CGFloat>) {
    self._textViewHeight = textViewHeight
}

然后你会设置textViewHeight到您计算出的高度didLayoutSubviews并添加一个.frame修饰符到你的HighlighterVC像这样:

VStack {
    HighlighterVC(textViewHeight: self.$textViewHeight)
        .frame(height: self.textViewHeight)
    Text("Tap and drag to highlight")
        .foregroundColor(.gray)
        .font(.caption)
}

就像我在回答开始时所说的那样,这个解决方案(我相信会起作用,但由于我无法测试它,所以我不是 100% 确定)基于您对您需要什么的想法。如果没有看到更多代码,我不可能说这是否是最好的解决方案。

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

从 SwiftUI 中的 UIKit 更新 UIViewRepresentable 大小 的相关文章

随机推荐

  • GLFW 3 已初始化,但还没有?

    我正在努力使用 GLFW 3 函数 glfwCreateWindow 创建窗口 我设置了一个错误回调函数 它几乎只是打印出错误号和描述 并且根据 GLFW 库尚未初始化 即使 glfwInit 函数刚刚返回成功 这是我的代码的摘录 Erro
  • ImageView 上的边框半径和阴影

    我想在 JavaFX 中应用边框半径和阴影 在 CSS3 中它将是 box shadow rgba 0 0 0 0 8 0 0 10px border radius 3px 现在我想在 JavaFX 中实现这一点 但即使是 border r
  • 必须使用mockbean而不是自动装配

    我用的是弹簧靴2 我创建了一个基本测试 RunWith SpringJUnit4ClassRunner class public class VehicleServiceImplTest private VehiculeServiceImp
  • 了解 ARKit 中的坐标空间

    我已阅读所有有关的 Apple 指南ARKit 并观看了一个全球开发者大会视频 但我不明白坐标系如何绑定到 一个真实的世界 A device 3D 场景 相互连接 我可以添加一个对象 例如SCNPlane let stripe SCNPla
  • VBA 中的公共对象模块是什么?

    我试图在 VBA 中尽可能接近函数指针 抽象类 我有一堂课叫VerificationManager并验证几个电子表格中的一堆单元格是否匹配 根据所使用的信息和电子表格 这将以不同的方式完成 我希望能够通过使用以下命令在字符串中指定要调用的方
  • 如何从 YouTube 获取频道 ID?

    我正在尝试使用以下方法从我的频道检索数据YouTube 数据 API V3 为此 我需要我的频道 ID 我尝试从我的 YouTube 帐户中找到我的频道 ID 但各种方法都失败了 如果有人给我一个建议 我会非常高兴 这是我用来检索数据的 U
  • $是什么? Powershell 中的别名?

    今天向我展示的脚本中有这样一行 If do some stuff 我从来没有见过美元符号问号别名 之前我无法通过谷歌确定它的用途 当我在 powershell 窗口中执行它时 它通常返回 True 但偶尔返回 False 我的测试似乎表明
  • CMake:包含目录的排序(如何混合基于系统和用户的包含路径?)

    我有一个 CMake 项目 其中包含并链接两个库 例如A and B 实际上它不止两个 其中之一是增强的东西 但这在这里并不重要 两者都位于通过FindSomething cmake 正确 填充标准 CMake 变量的脚本 例如通过添加包含
  • 使用 PHP 客户端库将大文件上传到 google 驱动器

    我正在尝试通过他们的 PHP 客户端库使用 Google Drive API 上传大文件 目前它失败了 因为似乎唯一可用的方法是 简单 上传方法 不幸的是 这需要您将整个文件作为数据加载 并且它达到了我的 php 内存限制 我想知道是否可能
  • 动态转换为 void 指针有实际用途吗?

    在 C 中 T q dynamic cast
  • cmake配置时出错

    抱歉 如果这不是发布此内容的正确位置 但我认为 librocket 论坛早已消亡 我有 Ubuntu 12 04 我按照构建 librocket 的步骤进行操作here 我按照步骤所述使用 cmake 但当我按 c 来配置时出现此错误 CM
  • ion-content 和 ion-footer 有不同的 $scope

    我的 ion content 中有两个输入字段 它们都附加了一个 ng model 然后在我的 ion footer 中 我有一个 ng click 我在其中调用一个函数并传入两个 ng model 当我在 ion content 中进行
  • 反向代理背后的 Springfox Swagger UI

    我已经使用 Swagger API 文档配置了 Spring Boot 应用程序并配置了 Swagger UI 我还在反向代理后面运行后端应用程序 该代理映射来自的所有请求host port api to backend host port
  • 如何在 ASP.NET 中运行后台任务 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要运行一些任务Asp net MVC 每 5 分钟后 我从来没有研究过这样的功能 所以我用谷歌搜索并找到了一些实现此功能的选项 这些是选项here here and here 我已经查
  • Monotouch 中的子类化和重写 UITextField

    我正在尝试将 UITextField 的占位符文本设置为不同的颜色 我了解到我需要子类化并重写 drawPlaceholderInRect 方法 iPhone UITextField 更改占位符文本颜色 void drawPlacehold
  • Google Chrome 扩展程序中的同步调用

    我正在开发 Google Chrome 扩展程序 它必须阻止 重定向一些传出请求 为此 我使用chrome webRequest onBeforeRequest听众 为了决定是否阻止请求 我需要一些有关选项卡请求发送来源的信息 我可以使用它
  • Entity Framework 6 在一个事务中批量更新/删除

    在 EF6 中 我想在一个查询中更新 删除批量数据 我的代码是 using var context dataContextFactory GetContext var result1 from b in context MyTables w
  • Jetty Websocket 空闲超时

    我最近一直在研究带注释的 websocket Jetty API 9 4 5 release 并与它进行了聊天 但是我遇到了一个问题 5 分钟后 我相信这是默认计时器 会话关闭 这不是由于错误 我发现的唯一解决方案是在关闭事件时通知我的套接
  • 当我检查 nginx access.log 时,定期出现未知的 HEAD 请求

    首先我使用的服务器环境 服务器 nginx uwsgi django 应用程序 docker AWS ECS 部署 芹菜 rabbitmq ec2 缓存 redis ec2 日志记录 AWS CloudWatch 日志 瞭望塔第三方应用程序
  • 从 SwiftUI 中的 UIKit 更新 UIViewRepresentable 大小

    我正在嵌入一个高度可变的视图控制器UITextView在父 SwiftUI VStack 中 视图控制器将其框架调整为整个屏幕viewDidLoad and viewDidLayoutSubviews The UITextView仅扩展到其