使用pureLayout第三方框架,实现九宫格布局。
该代码的前提是:(1)已知每个小view的宽高。
(2)已知每行放3个小view
核心代码如下:
<pre name="code" class="objc">//每行的容量是3
static const NSInteger rowCapacity = 3;
@implementation IntroductionServiesView
//假设这个serviceItems就是传进来的小view
NSArray *serviceItems = self.serviceItemViews;
//autolayout九宫格布局
[serviceItems enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL * _Nonnull stop) {
NSInteger rowIndex = idx / rowCapacity; //行index
NSInteger columnIndex = idx % rowCapacity;//列index
//设置view的宽高
[view tn_setDimension:TNADimensionWidth toSize:self.width/rowCapacity-2*TNHOTEL_UNIVERSAL_SPACE(space)];
[view tn_setDimension:TNADimensionHeight toSize: TNHOTEL_UNIVERSAL_HEIGHT(serviceItemHeight)];
if (columnIndex == 0)
{//每行第一列
//设置和左边的边距
[view tn_pinEdgeToSuperviewEdge:TNAEdgeLeading];
if (rowIndex == 0)
{// 如果是第一行第一个
//设置和上边界的距离
[view tn_pinEdgeToSuperviewEdge:TNAEdgeTop];
}else
{//其他行第一个
//设置和上一行的距离
[view tn_pinEdgeToSuperviewEdge:TNAEdgeTop withInset: TNHOTEL_UNIVERSAL_HEIGHT(rowIndex*serviceItemHeight)];
}
}
else {
//设置item水平间距
[view tn_pinEdgeToSuperviewEdge:TNAEdgeTop withInset: TNHOTEL_UNIVERSAL_HEIGHT(rowIndex*serviceItemHeight)];
[view tn_pinEdgeToSuperviewEdge:TNAEdgeLeading withInset: TNHOTEL_UNIVERSAL_SPACE((SCREEN_WIDTH/rowCapacity)*(columnIndex) + serviceItemSpace)];
}
//用全部变量view来当做前一个view
self.view = view;
}];
}
@end
最后实现的效果: