更改堆栈视图中多个字段之一的高度

时间:2018-11-20 14:26:22

标签: swift xcode autolayout

在我的代码中,我有一个堆栈视图,该视图最初具有1个元素PhoneNumberField。可以在运行时动态添加另一个PhoneNumberFields

@IBAction func addAlternatePhoneNumberAction(_ sender: UIButton) {
        let alternateNumberView = PhoneNumberField()
        ...
        phoneNumberStackView.addArrangedSubview(alternateNumberView)
    }

PhoneNumberField的xib如下所示: enter image description here

问题是我希望能够基于“移动组合框”的内容动态隐藏“其他电话的名称”字段。当我设置'isHidden'参数时,一切都按预期工作,唯一的问题是PhoneNumberField的高度保持不变。当“其他电话的名称”字段隐藏时,我希望它缩小。

我尝试使用otherNumberNameField文件中PhoneNumberField.swift的高度常数的出口来执行此操作,但是问题在于,在这种情况下,堆栈视图中所有PhoneNumberFields的大小都第一个字段。

什么是正确的解决方案?

edit:除了以下答案:我还必须将phoneNumberStackView的分发设置为equal spacing。像魅力一样工作。

1 个答案:

答案 0 :(得分:3)

首先,创建StackView。

不设置高度限制,仅设置顶部,顶部,尾部和底部约束。 底部约束设置等于“错误标签”顶部约束。

然后将其分布设置为均等填充

enter image description here

现在将前两个视图放到一个视图中,并将此视图与OtherNumberField视图放到此StackView中。

所以现在您的层次结构应如下所示:

enter image description here

现在,当您从StackView隐藏一个视图时,由于未设置高度,StackView会变小。