以编程方式从超级视图中删除 UIView(自动布局)
Posted
技术标签:
【中文标题】以编程方式从超级视图中删除 UIView(自动布局)【英文标题】:Remove UIView from superview programmatically (autolayout) 【发布时间】:2014-05-31 14:55:19 【问题描述】:我有一个UIViewController
,其中包含主要的UIView
,其中顶部是一个小的UIView
,其余的空间是一个UITableView
。
所有的设计都是用Storyboards和autolayout完成的,所以上面UIView
基本上有这些限制:
这些为UITableView
:
UIView
底部空间 = 0px 到超级视图
前导空间 = 0px 到超级视图
尾随空格 = 0 px 超级视图
当使用不同的屏幕尺寸或方向时,一切正常并正确调整大小。我现在要做的是以编程方式删除顶部UIView
,然后我希望UITableView
将空间填充到超级视图的顶部。
我知道我可以以编程方式为UITableView
创建一个新约束,但我正在寻找的是低优先级约束?已在 Storyboard 中定义,可以与之前已定义的内容共存。
任何其他技巧或解决方法也将不胜感激,唯一的限制是一切都应该在情节提要中设计,并且一切都应该在调用后工作:
[view removeFromSuperview];
这是设计:
【问题讨论】:
顶视图一定要去掉吗?如果不是,您可以将顶视图的高度更改为 0(零)的动画,或者您可以将顶视图的顶部约束常数从 0 更改为 -44 的动画,这将使视图从屏幕顶部滑出。在任何一种情况下,表格视图都应该占用“额外”空间,并且会以动画方式启动! 【参考方案1】:从超级视图中删除顶视图后,只需更新 tableview 的框架以填充整个窗口
【讨论】:
【参考方案2】:您只需要添加另一个顶部约束,一个到顶部布局指南,然后将其编辑为优先级为 900,常量值为 0。如果您已经有顶部视图,您将必须从下视图拖动到左侧列表中的主视图,因为您将无法访问画布中的主视图。
【讨论】:
【参考方案3】:这很简单,因为您已经对顶部 UIView 进行了高度约束,并在顶部视图和表格视图之间进行了垂直空间约束。
在各自的实现 (.m) 类中创建高度约束的实例。
@property(强,非原子)IBOutlet NSLayoutConstraint *topViewHeightConstraint
然后当你不想要顶视图时,写 topViewHeightConstraint.constant = 0.f
由于您已经在顶视图和表格视图之间进行了垂直空间限制,因此表格视图将占据超级视图的整个空间。
当您再次想要顶视图时,只需设置约束值。
【讨论】:
以上是关于以编程方式从超级视图中删除 UIView(自动布局)的主要内容,如果未能解决你的问题,请参考以下文章