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