在 stackview 中调整 UIView 的大小

Posted

技术标签:

【中文标题】在 stackview 中调整 UIView 的大小【英文标题】:Resize a UIView inside a stackview 【发布时间】:2017-09-17 20:54:23 【问题描述】:

我需要帮助来完成这个:

    这是一组 3 张照片。第一张照片是点击前的按钮屏幕,第二张照片是点击后的屏幕,第三张照片是我在 IB 中使用 stackview 设计的方式

我一直在尝试创建它,这就是我目前得到的结果。正如按钮点击后图片显示的那样,我仍然没有创建任何内容:

    我现在的结果

正如您在 gif 中看到的,当我按下按钮时,UIView height constraint.constant 设置为更高的值,并且 UIView 变得更高。我想要的只是剥离的背景也变得更高。

这是视图在 IB 中的布置方式。

最后,这就是我的编码方式


    class LetterScreenViewController: UIViewController, ResizeWordViewDelegate 
    
    @IBOutlet weak var youTubeView: YouTubeView!
    @IBOutlet weak var phonemeView: PhonemeView!
    @IBOutlet weak var wordView: WordView!
    
    var letterPresenter: LetterPresenter?
    
    @IBOutlet weak var heightWordViewConstraint: NSLayoutConstraint!

    override func viewDidLoad() 
        super.viewDidLoad()
        delegateWordObj()
        if let presenter = letterPresenter 
            presenter.setupView()
        
    
    
    @IBAction func dismissLetter(_ sender: Any) 
        dismiss(animated: true, completion: nil)
    
    func delegateWordObj() 
        wordView.resizeWordViewDelegate = self
    
    func didPressButton() 
        if heightWordViewConstraint.constant <= 0 
            heightWordViewConstraint.constant = 30
        else
            heightWordViewConstraint.constant = 0
        
    


import UIKit
protocol ResizeWordViewDelegate 
    func didPressButton()

class WordView: UIView 
    
    @IBOutlet weak var backgroundListras: UIImageView!
    @IBOutlet var WordView: UIView!
    
    @IBOutlet weak var showWordButton: UIButton!
    
    var resizeWordViewDelegate: ResizeWordViewDelegate!
        
    override init(frame: CGRect) 
        super.init(frame: frame)
        xibInit()
    
    
    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        xibInit()
    
    
    
    func xibInit() 
        Bundle.main.loadNibNamed("WordView", owner: self, options: nil)
        addSubview(WordView)
        WordView.frame = self.bounds
        WordView.round(corners: [.topLeft,.topRight], radius: 120)
        WordView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    
    
    @IBAction func showWordButtonAction(_ sender: Any) 
        resizeWordViewDelegate.didPressButton()
        self.frame.size = CGSize(width: 375, height: 200)
        self.backgroundListras.frame.size = CGSize(width: 375, height: 200)
    


我想知道一种方法来调整这个 UIView 的所有内容。在找到增加高度的解决方案后,我将能够放置 我按下按钮时显示的所有其他组件。

【问题讨论】:

@MKR 嗨,MKR。我尝试过:通过 UIViewController 中的代码更改 UIView 大小,通过 UIView 自己的类中的代码更改 UIView 大小,将 constraint.constant 更改为更高的值,到目前为止我所做的所有这些事情都会导致相同的结果gif 链接显示的事件。 UIView 变得更大,但所有内容都保持相同的大小,即使我将更高的值强制设置为条纹背景高度,它也会改变值,但不会改变模拟器中视觉高度的任何内容。检查此链接imgur.com/a/eG43i。它显示了我说的最后一件事。 【参考方案1】:

我相信你的目标是创造这样的东西:

我所要做的就是以编程方式更改约束的高度

查看下面项目中的解决方案:

https://gitlab.com/DanielLimaDF/ResizeTest.git

重要提示:注意addSubview,如果在调用addSubview之前创建了约束,它可以从视图中删除约束

【讨论】:

哇!谢谢丹尼尔·利马。这就是我需要复制的效果!

以上是关于在 stackview 中调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

在不停止 stackView 自动调整大小的情况下对齐图像视图

UIView 和 StackView 删除元素,Swift

具有顶部空间的 UIView 对 UIStackView 的约束未显示在 Stackview 下方

如何以编程方式将自定义 UIView 添加到 UIScrollView 之上的 Stackview?

创建一个内部有 2 个 UiView 的水平 Stackview

在 StackView 中按内容对齐两个元素