首页 > 解决方案 > 更改子视图的高度后调整超级视图的大小 - 没有自动布局

问题描述

当我问这个问题时,谷歌总是给出自动布局的结果。
我有一个自定义视图,它的子视图很少。其中一个子视图还具有 2 个子视图。

Superview  
  - Subview 1  
  - Subview 2  
     - Subview 21  
     - Subview 22   
  - Subview 3  

在某些按钮操作中,我隐藏了一个内部子视图(子视图 22)。之后,我正在更新外部子视图(子视图 2)的高度。

subheader.frame = CGRect(x: subheader.frame.origin.x, y: subheader.frame.origin.y, width: subheader.frame.size.width, height: 0)
subheader.isHidden = true
viewTop.frame = CGRect(x: viewTop.frame.origin.x, y: viewTop.frame.origin.y, width: viewTop.frame.size.width, height: 60)  
self.layoutSubviews()

subheader是viewTop的子视图,viewTop 是父视图的子视图。
问题是 viewTop 的高度没有改变。
注意viewTop渐变背景

viewTop.setViewGradientBackground(UIColor(red: 228.0 / 255.0, green: 221.0 / 255.0, blue: 135.0 / 255.0, alpha: 1.0), backgroundColorBottom: UIColor(red: 150.0 / 255.0, green: 129.0 / 255.0, blue: 32.0 / 255.0, alpha: 1.0))  

extension UIView
{
    func setViewGradientBackground(_ backgroundColorTop: UIColor, backgroundColorBottom: UIColor)
    {
        let btnGradient = CAGradientLayer()
        btnGradient.frame = self.bounds
        btnGradient.colors = [backgroundColorTop.cgColor as CGColor, backgroundColorBottom.cgColor as CGColor]
        self.layer.insertSublayer(btnGradient, at: 0)
    }
}

标签: iosswiftuiview

解决方案


self.layoutSubviews() 在这种情况下不起作用。它仅在使用自动布局时才有效。当您手动管理框架时,您应该在更改一个视图的框架时为所有超级视图和子视图设置框架。这是一件棘手的事情。

尝试实现自动布局。自动布局将轻松管理这些事情。


推荐阅读