首页 > 其他分享 >SwiftUI 集成 IMKit

SwiftUI 集成 IMKit

时间:2024-01-11 13:34:25浏览次数:35  
标签:集成 struct IMKit ChatListView SwiftUI UINavigationController 页面 View

Swift UI 集成 IMKit

在 SwiftUI 中,集成 IMKit 中 RCConversationListViewController 和 RCConversationViewController 两页面可能存在以下问题:

1、直接在 View 中使用,两个页面会错位;

2、用 NavigationView 集成会话列表和会话页面,标题失效;


分析

这两个页面强依赖导航 UINavigationController,并且内部用的 frame 结算的布局。直接用放入 View 中会导致安全区域失效,导致 frame 计算错误。

struct ContentView: View {
var body: some View {
ChatListView()
}
}

在 SwiftUI 中,UIKit 的 UINavigationController 和 NavigationView 的标题兼容性不太好,在二级页面设置 navigationBar 的 title 不生效。


解决方案

开发者需要用 UIViewControllerRepresentable 将 UIKit 的页面转换一下:

struct ChatListView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let displayConversationTypeArray = [
RCConversationType.ConversationType_PRIVATE.rawValue,
RCConversationType.ConversationType_GROUP.rawValue,
]
let collectionConversationType = [
RCConversationType.ConversationType_SYSTEM.rawValue
]
guard let conversationList = RCDChatsViewController(
displayConversationTypes: displayConversationTypeArray,
collectionConversationType: collectionConversationType
) else {
return UIViewController()
}
return UINavigationController(rootViewController: conversationList);
}

func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}


然后在合适的地方使用,比如 ContentView 中,注意,需要使用 ignoresSafeArea 忽略安全区域。

struct ContentView: View {
var body: some View {
ChatListView()
.ignoresSafeArea()
}
}

标签:集成,struct,IMKit,ChatListView,SwiftUI,UINavigationController,页面,View
From: https://blog.51cto.com/u_16340920/9196868

相关文章

  • 自动化集成有哪些典型应用场景?
    为什么要做自动化场景集成?主要分为以下几点:1、提高效率/减少错误:减少人工操作、人为错误、人力成本,提高生产效率、生产质量和稳定性。2、提高可靠性:提高系统的可靠性和稳定性,减少系统故障和停机时间。3、节约资源:节约能源和物料资源,降低生产成本。4、适应变化:快速适应市场变化和客......
  • Springboot 项目集成 PageOffice V6 最简单代码
    本文描述了PageOffice产品在Springboot项目中如何集成调用。(本示例使用了Thymeleaf模板引擎)新建Springboot项目:pageoffice6-springboot2-simple在您项目的pom.xml中通过下面的代码引入PageOffice依赖。pageoffice.jar已发布到Maven中央仓库(opensnewwindow),建议使用最新......
  • 某集成电路中高端测试设备厂商:大幅提升网间文件交换效率
    集成电路中高端测试设备厂商该集成电路测试厂商是一家从事集成电路测试设备研发设计、制造、销售和服务的高科技企业,公司研发的中高端自动化测试设备产品填补了中国集成电路中高端测试设备领域的空白,改变目前完全依赖国外进口的现状同时本着与国外领导企业加强经济合作和技术交流......
  • 基于 Docker 打造前端持续集成开发环境
    基于Docker打造前端持续集成开发环境写在前面:这不是一篇有新意的文章,因为这篇文章半年前我就发布在其他平台上过,为什么在知乎上旧文新发?除了想要把发布在其他地方的文章统一放到知乎上之外,还源于我最近在面试一些前端工程师时的一些疑惑,发现很多应聘高级前端岗的开发者对J......
  • 零代码集成自动化的实现逻辑是什么?
    零代码的概念是什么?零代码平台是一种软件开发工具或平台,非技术人员能够创建和部署应用程序,而无需编写任何代码。它提供了可视化的界面和拖拽式的操作,使用户能够通过简单的配置和组合,以图形化的方式构建应用程序。这种平台通常包含了丰富的预定义组件、模板和工具,用户可以根据自己的......
  • LoRa SIP模块动能世纪XD6500S集成RF前端+LoRa无线电收发器SX1262
    相信大部分了解LoRa的朋友们都知道,LoRa是低功耗广域网通信技术中的一种,是Se***ch公司专有的一种基于扩频技术的超远距离无线传输技术。LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。而我们今天的主角LoRaSIP模块动能世纪XD6500S......
  • 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2
    在Part1中,我们一起了解了什么是Prometheus和Grafana,以及使用这些工具的前提条件和优势。在本部分,将继续带您学习如何安装Helm以及如何使用PrometheusHelmCharts。 开始使用Helm和HelmChartArtifactHub为HelmChart提供了公共和私有资源库。我们将使用这些H......
  • SpringBoot集成WebSocket实现消息推送
    一、前言WebSocket是一种新型的通信协议,它可以在客户端和服务端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。它是一种基于TCP协议实现的全双工通信协议,使用它可以实现实时通信,不必担心HTTP协议的短连接问题。SpringBoot可以很方便的集成WebSocket实现高效实时的......
  • 2024年1月武汉/深圳软考系统集成项目管理工程师备考班
    系统集成项目管理工程师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成项目管理工程师,属于软考三个级别中的“中级”。  【报考资格】 不设......
  • dremio nessie 集成玩法
    昨天我简单写了dremio集成nessie的玩法,实际上dremio与nessie的集成可以分为两大类,一类是使用nessie做为catalog服务(当然也是支持写入iceberg的),一类是基于外部工具(spark,flink)使用nessie做为metadatastorage然后dremio查询参考玩法图外部工具类的catalog类的此时ness......