//控件本身的宽高发生改变的时候就会调用该方法
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 }