swift - 在 stackview 中隐藏 View 仍然保持约束事件

标签 swift uistackview

这段代码可以复制粘贴到一个新创建的项目中:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let label = createLabel()
        let imageView = createImageView()
        let stackView = UIStackView(arrangedSubviews: [imageView, label])

        stackView.axis = .vertical
        stackView.spacing = 5

        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { (_) in
            imageView.isHidden = true
        }
    }

    func createLabel() -> UILabel {
        let label = UILabel(frame: .zero)

        label.text = "Some Text"
        label.setContentHuggingPriority(.required, for: .horizontal)
        label.setContentHuggingPriority(.required, for: .vertical)
        label.backgroundColor = .green

        return label
    }

    func createImageView() -> UIImageView {
        let imageView = UIImageView()

        imageView.backgroundColor = .red
        imageView.heightAnchor.constraint(equalToConstant: 200).isActive = true
        imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true

        return imageView
    }
}

它是 UIStackView 中的一个 UILabel 和一个 UIImageView。当我隐藏 UIImageView 时,我看到 UIStackView 正确地适应了 UILabel 的 高度。但是,UIStackView 不会自行适应 UILabel 的宽度。

我怎样才能让 UIStackView 调整自己的大小到它只有可见的 View /UILabel?我为 UIImageView 的高度 anchor 常量设置了可变约束,并在隐藏 UIImageView 时将其关闭,但 UILabel 对某些人来说消失了奇怪的原因。

最佳答案

添加堆栈 View alignment

This property determines how the stack view lays out its arranged views perpendicularly to its axis. The default value is UIStackView.Alignment.fill.

stackView.alignment = .leading

Stackview 将自身调整为仅可见的 UILabel

enter image description here

关于swift - 在 stackview 中隐藏 View 仍然保持约束事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56206970/

相关文章:

arrays - 排序数组和查找更改 - Swift

ios - 使用 Alamofire 从 api 获取响应时出现问题

ios - userDefaults.setObject 在设备上崩溃但在 iOS 模拟器中没有

ios - 如何正确设置隐藏在 UITableViewCell 内的 UIStackView 的动画?

iOS 非持久化数据结构

ios - Swift:通过保存在 Firebase 中的 URL 显示图像

swift - 将 subview 添加到堆栈 View 以设置背景颜色的函数或类

ios - 将 Stackview 添加到 UIScrollView

ios - UIStackView 隐藏/取消隐藏 arrangedSubView 问题

ios - 三个 UIImageViews 水平堆叠并缩放