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

我有一个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]; 

你可以这样做:

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

斯威夫特3:

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

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

 self.collectionView.center = superview.center 

如果superview的原点不是0,0,则会导致问题

您可以设置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); 

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

听说过布局?这可能会对你有所帮助。

这用于水平对齐

 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]]; 

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];