UIView 和 StackView 删除元素,Swift

Posted

技术标签:

【中文标题】UIView 和 StackView 删除元素,Swift【英文标题】:UIView and StackView removing elements, 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 秒,然后它消失了,我只有我的按钮。

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

【问题讨论】:

【参考方案1】:

使用 viewWillAppear 代替 viewDidAppear。

【讨论】:

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

以上是关于UIView 和 StackView 删除元素,Swift的主要内容,如果未能解决你的问题,请参考以下文章

UIView 内的 StackView - 自动高度

自动布局 - StackView 删除现有约束

在 stackview 中调整 UIView 的大小

具有顶部空间的 UIView 对 UIStackView 的约束未显示在 Stackview 下方

StackView

创建一个内部有 2 个 UiView 的水平 Stackview