替换 UIStackView 中的视图

Posted

技术标签:

【中文标题】替换 UIStackView 中的视图【英文标题】:Replace view inside UIStackView 【发布时间】:2018-07-29 23:34:42 【问题描述】:

我有一个UIStackView,里面有 5 个按钮。其中一个按钮 (#4) 需要在单击后替换为 UIPickerView,并在选择其他四个按钮之一后切换回 UIButton

UIStackView水平,对齐方式填充,分布按比例填充

堆栈是使用 storyboard 完成的,我正在尝试将视图替换为:

    override func viewDidLayoutSubviews()
        self.pickerView.frame.origin = self.view.viewWithTag(40)!.frame.origin
        self.pickerView.frame.size = CGSize(width: 30, height: 30)


但是我的UIStackView在按钮点击后不会重新排列,并且按钮#5停留在UIPickerView的顶部。

有什么想法吗?

【问题讨论】:

如果您想在按下按钮后更改内容,请在按钮的目标/选择器中进行。您需要删除排列的子视图并将排列的子视图插入堆栈视图。不要硬编码框架/大小。请阅读 UIStackView 文档 【参考方案1】:

好的,我找到了代码。我不得不将addView 替换为addArrangedSubview

最终代码(按下按钮时):

    let stack = (self.view.viewWithTag(20) as! UIStackView)
    stack.addArrangedSubview(self.pickerView)

【讨论】:

以上是关于替换 UIStackView 中的视图的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 和另一个 UIStackView 问题中的占位符视图

为 UIStackView 中的视图添加大小约束

视图控制器中的 UIScrollview 中的 UISTackview 约束错误

将子视图保留为 UIStackView 中的原始尺寸

UIStackView 在容器视图中的行为不可预测

UIScrollView 中的嵌套 UIStackView 子项不会拉伸以填充