gpt4 book ai didi

ios - SwiftUI:有条件地隐藏 View 而不重新创建它

转载 作者:行者123 更新时间:2023-12-05 04:27:03 25 4
gpt4 key购买 nike

条件 View 修饰符的问题

我在 SwiftUI 中大量使用条件 View 修饰符,直到遇到一些问题和 recently discovered it is a bad idea .

根据我现在的理解,做这样的事情:

if condition {
view
} else {
view.hidden()
}

意味着 SwiftUI 会将两种情况下的 view 视为完全不同的 View 。因此,如果您从 if 跳转到 else,反之亦然,则会重新创建 View ,包括运行 onAppear 和任何初始动画。除此之外,它还将动画 view 从一个分支中断到另一个分支。即使添加 .id() 似乎也无法解决这个问题。

我附上了 minimum viable example所以你可以亲眼看到这种行为。不用说,这很糟糕。它会对性能产生重大影响,破坏动画,如果您在 onAppear 中执行一些繁重的操作(如网络请求),情况会更糟。

解决方案?

解决方案似乎是做这样的事情:

view.padding(condition? 10 : 0)

一切正常,SwiftUI 保持 view 存在,太棒了。

问题:.isHidden()

现在,我需要有条件地隐藏一个 View 。老实说,我不知道如何实现它。 .isHidden() 没有启用或禁用它的参数,因此无法使用与上面所示相同的方法。

那么:如何有条件地隐藏 View 而不重新创建它?我不想重新创建 View 的原因是 onAppear 被再次调用并重置 View 的状态,再次将动画触发到初始状态。还是我在这里的 SwiftUI 世界中完全使用了错误的方法?

最佳答案

一种可能的方法是使用opacity+disabled,比如

view
.opacity(isHidden ? 0 : 1)
.disabled(isHidden ? true : false)

关于ios - SwiftUI:有条件地隐藏 View 而不重新创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72908044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com