在其父视图中垂直和水平居中UIView

时间:2014-07-25 14:23:26

标签: ios objective-c uiview uicollectionview frame

我有一个UICollection视图在另一个UIView中。我试图将集合视图置于其父视图中。目前通过调整其框架手动执行此操作(请参阅下面的代码)。必须有一种更简单的方法。

当前代码:

self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(COLLECTION_PADDING+10, COLLECTION_PADDING+5, self.bounds.size.width - (COLLECTION_PADDING*2), self.bounds.size.height - (COLLECTION_PADDING+22)) collectionViewLayout:flow];

4 个答案:

答案 0 :(得分:23)

你可以这样做:

self.collectionView.center = CGPointMake(CGRectGetMidX(superview.bounds), CGRectGetMidY(superview.bounds));

斯威夫特3:

self.collectionView.center = CGPoint(superview.bounds.midX, superview.bounds.midY)

使用这种方法,无论superview的坐标如何,您的子视图都将以其超级视图为中心。使用这样的方法:

self.collectionView.center = superview.center

如果superview的原点不是0,0

,则会导致问题

答案 1 :(得分:3)

您可以设置collectionView的宽度和高度,然后使用center属性调整其位置。

self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,0,width,height)];
self.collectionView.center = CGPointMake(self.center.x,self.center.y);

编辑: 正如Logan在评论中提到的,这只有在self和self.collectionView具有相同的superview时才有效。如果要将collectionView添加到视图中并希望它在该视图中居中,那么您可以执行以下操作:

self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,0,width,height)];
self.collectionView.center = CGPointMake(self.center.x - self.frame.origin.x/2,self.center.y - self.frame.origin.x/2);

但是当涉及轮换时,这种情况并不起作用。在这种情况下,您将不得不使用其他方法。因此,正如编码中的任何内容一样,这不是一个明确的答案。但对于大多数情况,它会起作用。如果你遇到罕见的情况,它不起作用,那么你可能会做更多的自定义框架,而不仅仅是在父母的内心。

答案 2 :(得分:2)

听说布局?..这可能对你有帮助。

这是用于水平对齐

NSLayoutConstraint *centerHcons =[NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:collectionViewSuper attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0f];

这是用于垂直对齐

NSLayoutConstraint *centerVcons =[NSLayoutConstraint constraintWithItem:self.collectionView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:collectionViewSuper attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0f];

    [collectionViewSuper addConstraints:@[centerHcons, centerVcons]];

答案 3 :(得分:1)

IMO,您可以尝试查找收藏视图与父视图大小之间的差异。然后除以2并用所有边填充。

parentHeight = self.bounds.size.height;
parentWidth = self.bounds.size.width;
heightDiff = parentHeight - collectionview.bounds.size.height;
widthDiff = parentWidth - collectionview.bounds.size.width;
heightPadding = heightDiff/2;
widthPadding = widthDiff/2;

self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(widthPadding, heightPadding, parentWidth-widthPadding, parentHeight-heightPadding) collectionViewLayout:flow];