【问题标题】:UIView and StackView removing elements, SwiftUIView 和 StackView 删除元素,Swift
【发布时间】:2020-10-29 06:58:15
【问题描述】:

我在与我的 viewController 不同的文件中创建了一个自定义视图,然后我以编程方式添加它。 为了给您一些背景信息,它只是一张屏幕高度为一半的卡片。在这张卡片里面我有一个垂直的 stackView 包含:

  • 水平堆栈视图
  • 两个按钮

在这张卡片中,我根据模型中的给定值执行了一些操作。 这是我的代码:

func myFunction() {

    let value: Bool! = // true or false
    
    if value {
        self.stackView.isHidden = true
    } else {
        self.button1.isHidden = true
        self.button2.isHidden = true
    }

}

我在 viewDidAppear lyfecycle 中这样调用我的函数:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.myFunction()
}

问题是当我用这个视图打开我的视图时,我发现删除元素有一些滞后。例如,如果 value 为 true,那么我删除了我的水平堆栈视图,我仍然看到它 0.5 秒,然后它消失了,我只有我的按钮。

我以为是模拟器,设备会执行得更好,但还是一样... 我错过了什么吗?是否有一些动画或技巧可以立即执行此操作?

【问题讨论】:

    标签: swift xcode user-interface uiview storyboard


    【解决方案1】:

    使用 viewWillAppear 代替 viewDidAppear。

    【讨论】:

    • 我不知道为什么,但是如果我在 viewWillAppear 中调用我的函数,它不会执行其中的内容
    • 但是函数 viewWIllAppear 被调用,甚至你的函数,只是 ishidden 语句似乎没有做任何事情?
    • 我刚刚尝试了一个“解决方法”,将我的所有元素设置为隐藏在 ViewWillAppear 中,然后当我需要它们显示时,我设置为 true 并在 ViewDidAppear 中调用我的函数它看起来好一点
    • 老实说,如果您所做的只是基于在推送视图之前设置的模型进行一些条件检查,您应该能够在 viewDidLoad 中设置您的 UI
    • 所以你建议隐藏 viewWillAppear 中的所有内容并在 viewDidLoad 中调用我的函数?
    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多