iOS View没有按照我想要的方式扩展

时间:2013-12-18 09:26:25

标签: ios objective-c uiview

我有一个UIViewController,底部有一个UICollectionView和一个UIView。我把它放在一起的方式显示在下面的图片中

enter image description here

黄色方块是UICollectionView,红色是UIView。这很好。但现在我想调整UIView的大小,因为它有时包含更多信息,需要更大。所以我尝试了这个:

[self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height + 10)];

但是这会将UIView扩展到底部并且不可见。我想这是因为我没有正确的约束?我也尝试用相同的数量减去origin.y,这只适用于UICollectionView不会调整新的高度。那么我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

如果您使用的是自动布局,则不应该从代码中设置框架。相反,您应该修改导致视图大小不正确的约束的constant。您可以拥有该约束的IBOutlet,您可以更改它的constant属性。然后在视图控制器的视图中调用setNeedsLayout

答案 1 :(得分:0)

在故事板或xib文件中设置约束时,动画会对约束而不是大小和位置执行动画。

首先创建约束的出口引用,该引用将在视图控制器的头文件中更改(在您的情况下,UIView的顶部空间到顶部布局指南)。

当您想要为视图设置动画时,您现在必须更新其约束并要求布局视图 例如:

[UIView animateWithDuration:0.2
                         animations:^{
                             viewYConstraint.constant -= 44;
                             [self.view layoutIfNeeded];
                         }
]
//Now don't forget to update constraints
[self.view updateConstraints];