不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug
SwiftUI的tabview非常好用,简单几行就能构建一套基于Tab的App。但是SwiftUI目前tabview存在一个小bug,当tab切换时内部中的list或NavigationLink将会重新刷新。
看看bug
当我们切换到新的tab时,第一个tab被重置回初始状态了。
这个bug可以修复么
我们有两种解决方案,一种等6月份等WWDC新版发布,修复这个bug。另外就是自己动手封装一个tabview
实战解决
1、测试页面
import SwiftUIstruct ExampleView: View {@State var text: String = ""var body: some View {UIKitTabView([UIKitTabView.Tab(view: NavView(), title: "首页", image: "phone32.png"),UIKitTabView.Tab(view: Text("Second View"), title: "其他", image: "")])}
}struct NavView: View {var body: some View {NavigationView {VStack {NavigationLink(destination: Text("您能看到这个页面,则证明bug修复")) {Text("显示详细页")}}}}
}
2、封装个UIkitTabview
struct UIKitTabView: View {var viewControllers: [UIHostingController<AnyView>]@State var selectedIndex: Int = 0init(_ views: [Tab]) {self.viewControllers = views.map {let host = UIHostingController(rootView: $0.view)host.tabBarItem = $0.barItemreturn host}}var body: some View {TabBarController(controllers: viewControllers, selectedIndex: $selectedIndex).edgesIgnoringSafeArea(.all)}struct Tab {var view: AnyViewvar barItem: UITabBarIteminit<V: View>(view: V, barItem: UITabBarItem) {self.view = AnyView(view)self.barItem = barItem}// convenienceinit<V: View>(view: V, title: String?, image: String, selectedImage: String? = nil) {let selectedImage = selectedImage != nil ? UIImage(named: selectedImage!) : nillet barItem = UITabBarItem(title: title, image: UIImage(named: image), selectedImage: selectedImage)self.init(view: view, barItem: barItem)}}
}
3、制作一个TabBarController
import SwiftUI
import UIKitstruct TabBarController: UIViewControllerRepresentable {var controllers: [UIViewController]@Binding var selectedIndex: Intfunc makeUIViewController(context: Context) -> UITabBarController {let tabBarController = UITabBarController()tabBarController.viewControllers = controllerstabBarController.delegate = context.coordinatortabBarController.selectedIndex = 0return tabBarController}func updateUIViewController(_ tabBarController: UITabBarController, context: Context) {tabBarController.selectedIndex = selectedIndex}func makeCoordinator() -> Coordinator {Coordinator(self)}class Coordinator: NSObject, UITabBarControllerDelegate {var parent: TabBarControllerinit(_ tabBarController: TabBarController) {self.parent = tabBarController}func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {parent.selectedIndex = tabBarController.selectedIndex}}
}
技术交流
QQ:3365059189 SwiftUI技术交流QQ群:518696470
- 请关注我的专栏icloudend, SwiftUI教程与源码 https://www.jianshu.com/c/7b3e3b671970
不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug相关推荐
- Web前端笔记-解决NicSroll使用后页面跳动(每次刷新或进入跳动一下然后正常)问题
我的是这样的页面 头部和尾部不动,就中间动.但每次刷新时会先出现这个. 然后页面跳动下,就正常了,很奇怪的体验,对应的代码如下: <head>.........<script> ...
- IOS小技巧–用runtime 解决UIButton 重复点击问题
IOS小技巧–用runtime 解决UIButton 重复点击问题 什么是这个问题 我们的按钮是点击一次响应一次, 即使频繁的点击也不会出问题, 可是某些场景下还偏偏就是会出问题. 通常是如何解决 我 ...
- 三星s6老显示无服务器,三星手机最常见的故障和修复小技巧助你解决难题
三星手机最常见的故障和修复小技巧助你解决难题 三星的Galaxy系列手机是市场上最好的设备之一.就像所有高端移动技术一样,随着软件和硬件的老化,你最终会遇到某种问题.本指南将向您介绍如何解决三星Gal ...
- 微信H5页面,返回上一页面后页面不会自动刷新
最近在做微信公众号中的功能,有发现一个问题,就是微信H5页面中,有时候返回上一页后页面不会自动刷新,这样子就有可能造成页面数据更新不及时 在网上搜索后发现一个解决办法,使用window监听pageSh ...
- 不刷新页面的tab_现代 Web 页面开发流程
通常来说,Web页面开发的流程大致是这样的:设计师(设计师不是美工,就像程序员不是码农一样)提供设计稿,通常是图片格式.然后前端的开发人员(在ThoughtWorks我们称之为UI Dev)来手工的将 ...
- java中刷新页面的js,[Java教程]js页面刷新之实现框架内外刷新(整体、局部)
[Java教程]js页面刷新之实现框架内外刷新(整体.局部) 0 2016-10-12 12:00:56 这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷 ...
- wi ndows怎么自动编页,15个小技巧,让我的Windows电脑更好用了!
原标题:15个小技巧,让我的Windows电脑更好用了! 作者:水韬呀 来源:水韬呀(id: shuitao_Ya) 小学三年级,那是我第一次接触电脑,电脑系统是老旧的Windows XP,高中时换上 ...
- 【演示文稿制作软件】Focusky教程 | 正文页的排版小技巧 - 留白与距离
(Focusky动画演示大师也称为"FS软件")留白指的是每帧的内容与该帧边界之间无内容的空白. 所谓的空白,不是单指白色背景,而是指那些可以用来当作背景的颜色或者图片,它们不用来 ...
- 小技巧收藏之解决Word里9个常见难题
9个技巧教你解决Word里9个常见难题 1.前言 在生活中,我们经常使用office办公软件,其中做word,基本上只要有工作的,都是需要接触到,很多时候老是有一些莫名其妙的难题,什么方框里面打勾啊, ...
最新文章
- 新思路等级考二级c语言题答案,2017计算机二级C语言考试强化习题及答案
- 屏幕广播系统_如何设计系统,而不是屏幕
- 解决Error #15: Initializing libiomp5.dylib, but found libomp.dylib already initialized.
- 安装包损坏无法安装怎么办?关于更新big sur系统后软件下载无法安装问题的解答
- SpringBoot入门-自动配置原理
- python+selenium,实现带有验证码的自动化登录功能
- Python中变量的命名以及输入输出
- 2019年失业以后,他们都经历了什么?
- CSDN文章标题名不能有%-6A这样的字串
- 数学建模 —— 自回归模型
- RP产品原型资源分享-论坛类
- CRS-0804:PROC-26: Error while accessing the physical storage
- C++性能优化(十二)——自旋锁
- Aseprite学习/技巧
- CSDN博客字体样式、字体大小、字体颜色、首行缩进调节
- 笔记本连接手机热点并共享网络给台式机
- Data + AI Summit 2022 超清视频下载
- C语言例题:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
- Linux中存储设备的命名规则
- 前天在腾讯soso问问上别人问我raid问题?
热门文章
- Directx11教程(18) D3D11管线(7)
- 重提URL Rewrite(3):在URL Rewrite后保持PostBack地址(转老赵blog)
- Selenium无法点击元素,报错:ElementClickInterceptedException:element click intercepted
- .NET UIAutomation实现Word文档加密暴力破解
- 在阿里云里申请免费Https证书SSL
- Spring EL hello world实例
- Spring依赖检查
- 腾讯地图api如何根据地址获取经纬度
- 微信web开发者工具调试
- composer 完整路径才能访问_一份完整的运营方案策划思路,拿走不谢(精华版)