【发布时间】:2018-05-19 10:51:15
【问题描述】:
我正在根据在 Segment Control 中点击的 Segment 隐藏和取消隐藏 dropDownView(由文本字段和按钮组成的 UIView)。以下是视图层次结构:-
以下是隐藏/取消隐藏 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 视图与段控制重叠,我不知道为什么。任何有助于理解此问题的帮助表示赞赏。
我也已经尝试过
1。设置需求布局,
2. setNeedsDisplay 和
3.将dropDownView的高度限制优先级从999降低
1000
【问题讨论】:
-
我注意到在堆栈视图中重复隐藏或取消隐藏视图似乎是累积的。尝试添加检查 isHidden 并仅在需要时更改状态:
if view.isHidden { view.isHidden = false }或if !view.isHidden { view.isHidden = true } -
视图是 mainStackView。所以你的意思是我需要为下拉视图获取出口并检查它是否隐藏然后应用? @克里斯
-
是的,我想是这样 - 可能还有另一个问题,但这在一个更简单的上下文中对我有用,即在 tableview 单元格的堆栈视图中隐藏和取消隐藏排列的子视图。
-
您的前 3 个案例也可以表示为
case 0, 1, 2: -
是的。会这样做的。然而你的建议没有奏效。 12 次尝试后,它不再起作用。感谢案例建议。
标签: ios swift uiview uistackview