我有一个UIViewController,底部有一个UICollectionView和一个UIView。我把它放在一起的方式显示在下面的图片中
黄色方块是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不会调整新的高度。那么我该如何解决这个问题呢?
答案 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];