首页 > 解决方案 > 视图加载时如何防止按钮出现瞬间

问题描述

所以我的目标是顺利加载 viewController 没有瞬间错误。我有一个函数,用于确定在基于 Firestore 文档中的字段加载视图时要显示哪些按钮。这是功能:

func determinePurchasedStatusVerification() {
    db.collection("student_users/\(user?.uid)/events_bought").whereField("event_name", isEqualTo: selectedEventName!).whereField("isEventPurchased", isEqualTo: true).getDocuments { (querySnapshot, error) in
        if let error = error {
            print("\(error)")
        } else {
            guard let querySnap = querySnapshot?.isEmpty else { return }
            if querySnap == true {
                self.purchaseTicketButton.isHidden = false
                self.viewPurchaseButton.isHidden = true
                self.cancelPurchaseButton.isHidden = true
            } else {
                self.purchaseTicketButton.isHidden = true
                self.viewPurchaseButton.isHidden = false
                self.cancelPurchaseButton.isHidden = false
            }
        }
    }

}

我在 vc 中调用了这个函数,viewWillAppear()但是当我实例化到那个 vc 时,这就是结果......

vc错误

额外的购票按钮会出现一瞬间。即使它非常快,您仍然可以看到它,这不是用户需要看到的。当您单击未购买的单元格时,反之亦然,底部的两个按钮会出现片刻。我只是想知道如何防止这个快速错误,并能够在按钮隐藏中没有延迟地显示平滑的转场。谢谢。

标签: iosswiftuiviewcontrolleruibuttonviewwillappear

解决方案


getDocuments是一个异步函数,这意味着它不会立即调用它的回调函数——它会在从服务器取回数据时调用它。仅仅因为您的 Internet 连接速度很快而且 Firebase 服务器的速度肯定很快,这似乎只是一瞬间,但这肯定是一个非零时间。而且,连接速度较慢的人可能会经历更多的延迟。

除非你的回调被调用了两次,结果不同(这似乎值得怀疑),这里唯一的解决方案是确保你的初始状态隐藏了所有按钮(可能还有一个加载指示器),然后显示你想要的按钮一次你得到了数据(就像你现在一样)。不过,我的猜测是,您有一个按钮可见的初始状态这会导致闪烁。


推荐阅读