//控件本身的宽高发生改变的时候就会调用该方法
1 - (void)layoutSubviews
2 {
3 // 一定要调用super
4 [super layoutSubviews];
5 int columns = self.frame.size.width / kTitleW;//每一行要显示列数
6 for (int i = 0; i<_titles.count; i++) {
7 UIButton *btn = self.subviews[i];
8 // 设置位置,x值与列号有关,y值与行号有关
9 CGFloat x = i % columns * kTitleW;//i对列数取余,得出在第几列
10 CGFloat y = i / columns * kTitleH;//i除以列数,得出在第几行
11 btn.frame = CGRectMake(x, y, kTitleW, kTitleH);
12 }
13 int rows = (_titles.count + columns - 1) / columns;//总个数+列数-1,然后除以列数,就得出一共有多少行
14 CGRect frame = self.frame;
15 frame.size.height = rows * kTitleH;
16 self.frame = frame;
17
18
19 }