ios - UIStackView 隐藏/取消隐藏排列的子视图问题
问题描述
我正在根据在 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 View 与段控制重叠,我不知道为什么。感谢您对理解此问题的任何帮助。
另外我已经尝试过
1.setNeedsLayout、
2.setNeedsDisplay 和
3.将 dropDownView 的高度约束的优先级从 1000 降低到 999
解决方案
似乎在 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
}
}
推荐阅读
- python - 使用 slack 上传 api 上传文件名包含日语到 slack 时出现 no_file_data 错误
- sql-server - 在更新(随机)的情况下,不会为所有行触发触发器
- javascript - 混淆在 JS 中使用高阶函数
- ios - 如何在 Swift 中将“__NSIArrayI”转换为 JSON 数组?
- android - 在有前台服务时屏幕关闭时应用程序正在关闭
- c - 直接使用运算符地址与使用指针变量返回局部变量的地址
- java - 我如何指向随机密钥(firebase 用户 ID)
- sql - 总结所有以前的工作经验(以月为单位),其中行是动态的(1 行表示 1 次经验)并且对于每个员工都不同
- apache-kafka - Kafka Connect/Landoop:FtpSourceConfig 的递归路径
- javascript - 将文本输入中的十进制数限制为最大 100.00 的指令(正则表达式)