OGeek|极客世界-中国程序员成长平台

标题: ios - UIStackView 隐藏/取消隐藏排列的 subview 问题 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 20:10
标题: ios - UIStackView 隐藏/取消隐藏排列的 subview 问题

我正在根据在 Segment Control 中点击的 Segment 隐藏和取消隐藏 dropDownView(由文本字段和按钮组成的 UIView)。以下是 View 层次结构:-

enter image description here

以下是隐藏/取消隐藏 dropDownView 的代码:-

 private func animateView(view: UIStackView, toHidden hidden: Bool) {
    UIView.animate(withDuration: 0.25) 
    {
    let firstView = view.arrangedSubviews[0]
    firstView.isHidden = hidden
    }
    }
func segmentValueChanged(_ sender: UISegmentedControl) {
        let segmentSelected = segmentControl.selectedSegmentIndex
        switch segmentSelected {
        case 0:
            animateView(view: mainStackView, toHidden: true)
        case 1:
         animateView(view: mainStackView, toHidden: true)
        case 2:
            animateView(view: mainStackView, toHidden: true)
        case 3:
           animateView(view: mainStackView, toHidden: false)
        default:
            break
        }
    }

我面临的问题是在更改段超过 10-15 次后,上述代码停止工作并且 DropDown View 与段控制重叠,我不知道为什么。任何有助于理解此问题的帮助表示赞赏。

我也试过了
<强> 1。设置需求布局,
2.设置NeedsDisplay和
3.将dropDownView的高度限制优先级从999降低 1000



Best Answer-推荐答案


似乎在 completionClosure 中的附加设置 isHidden 修复了该问题(Swift 5 语法):

private func animateView(view: UIStackView, toHidden hidden: Bool) {
    let firstView = view.arrangedSubviews[0]
    UIView.animate(withDuration: 0.25) {
        firstView.isHidden = hidden
        view.layoutIfNeeded()
    } completion {
        firstView.isHidden = hidden
    }
}

关于ios - UIStackView 隐藏/取消隐藏排列的 subview 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424480/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4