ios - 更改子视图的高度后调整超级视图的大小 - 没有自动布局
问题描述
当我问这个问题时,谷歌总是给出自动布局的结果。
我有一个自定义视图,它的子视图很少。其中一个子视图还具有 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)
}
}
解决方案
self.layoutSubviews() 在这种情况下不起作用。它仅在使用自动布局时才有效。当您手动管理框架时,您应该在更改一个视图的框架时为所有超级视图和子视图设置框架。这是一件棘手的事情。
尝试实现自动布局。自动布局将轻松管理这些事情。
推荐阅读
- deep-learning - CNTK 以百分比加载具有类从属关系的图片
- bash - 期望从输出中获取指定信息
- hyperledger-fabric - 超级账本结构:找不到匹配的 SKI 私钥
- python - 计算机锁定时Windows计划任务python读取文件
- javascript - Angular 2 摆脱了嵌套订阅
- xml - 尝试使用
我正在按照这个解决方案在我的字符串资源文件中使用 enetities:
- symfony - Symfony 4 和 Postman 访问来自 post-data POST 请求的文件
- reporting-services - 在 SSRS 上对表达式进行排序
- ios - 推送通知声音 (iOS)