2014-07-16 89 views
3

我有以下设计。 enter image description hereUITableView自动布局灵活高度

正在使用AutoLayout使每件事情都变得灵活。在这个设计中,我有一个UIView,它是在图像中显示的灰色的灰色和在UIView以下的UITableView。有时我必须显示这UIView有时我必须隐藏这灰色UIView

我的问题是当我隐瞒UIView,UITableView没有固定它的高度。我不想在.m文件中硬编码。有没有可能AutoLayout处理这个问题。我有这些约束如下图。我是否缺少任何限制。

enter image description here

当我尝试改变UIView高度,UITableView的不向上移动,并示出了一些橙色约束作为显示在图像内。 enter image description here

+0

你在运行时检查过吗?在界面构建器中,如果您更改了常量的约束条件,则会显示一条橙黄线,以通知相对视图的布局将在运行时更改。只需要在界面生成器中删除黄线,选择编辑器 - >解决自动布局问题 - >更新帧。 – soulpark

回答

1

该限制看起来不错。您只需显示/隐藏灰色UIView即可更改高度限制常数。 为此,请在控制器中为约束创建一个IBOutlet(您的操作方式与您对UIViewIBOutlet的操作方法相同),并且当您要隐藏灰色视图时,请将约束的constant属性设置为0

例如。

@interface MyViewController 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *greyViewHeightConstraint; 
@end 

,当你想隐藏的观点:

self.greyViewHeightConstraint.constant = 0; 

要再次显示视图,你将在故事板被加载(如在viewDidLoad为以后有救了“默认”的恒定值例如),并将self.greyViewHeightConstraint.constant设置为此保存的值。

还要注意这些约束条件的变化can be animated


您在Interface Builder中看到的“橙色约束”是正常的:它表明视图框架与您设置的约束不匹配。然后,您可以更新框架以遵守约束,或更新约束以匹配框架。

+0

好的。让我试试你的解决方案。 – user2706827

+0

您的解决方案按照我的需求工作。 – user2706827