奮斗的七月
UIButton中的titleEdgeInsets和imageEdgeInsets可以管理button中title和image的布局捍靠。利用這兩個(gè)屬性就可以輕松的設(shè)置一個(gè)圖片一個(gè)文本這樣的布局。
但是先要對(duì)著兩個(gè)屬性了解清楚
UIButton *btnCeShi = [[UIButton alloc]initWithFrame:CGRectMake(20, 30, 80, 80)];
[self.view addSubview:btnCeShi];
btnCeShi.backgroundColor = [UIColor redColor];
[btnCeShi setTitle:@"測(cè)試" forState:UIControlStateNormal];
[btnCeShi setImage:[UIImage imageNamed:@"select"] forState:UIControlStateNormal];
奮斗的七月
這是一個(gè)基本的button捐晶,默認(rèn)情況下胡陪,圖片在左坷虑,文字在右秀姐,垂直居中顯示往声,如上圖擂找。
只設(shè)置image或title其中一項(xiàng)時(shí),默認(rèn)是正常居中顯示的浩销,但我們同時(shí)設(shè)置image和title時(shí)贯涎,則會(huì)出現(xiàn)上圖的顯示,這是為什么呢慢洋?那就是當(dāng)我們同時(shí)添加image和title時(shí)塘雳,image默認(rèn)會(huì)向左偏移button的titleLabel的寬度,而title會(huì)向右偏移image的寬度且警,既然明白了原理粉捻,我們就可以設(shè)置偏移量來(lái)達(dá)到我們想要的任何效果。
默認(rèn)情況下
button.titleEdgeInsets = UIEdgeInsetsZero;
button.imageEdgeInsets = UIEdgeInsetsZero;
現(xiàn)在我們就可以任意的修改button的布局
1. 設(shè)置圖片和文字都是居中的布局
button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, 0, 0);
// button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.frame.size.width);
// 由于iOS8中titleLabel的size為0斑芜,用上面這樣設(shè)置有問(wèn)題肩刃,修改一下即可
button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.intrinsicContentSize.width);
奮斗的七月
2. 設(shè)置圖片在上,文字在下杏头,水平居中顯示
button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, -button.imageView.frame.size.height, 0);
// button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.frame.size.height, 0, 0, -button.titleLabel.frame.size.width);
// 由于iOS8中titleLabel的size為0盈包,用上面這樣設(shè)置有問(wèn)題,修改一下即可
button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height, 0, 0, -button.titleLabel.intrinsicContentSize.width);
奮斗的七月
如果覺(jué)得圖片和文字離的太近了醇王,稍微分開一點(diǎn):
CGFloat offset = 40.0f;
button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width, -button.imageView.frame.size.height-offset/2, 0);
// button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.frame.size.height-offset/2, 0, 0, -button.titleLabel.frame.size.width);
// 由于iOS8中titleLabel的size為0呢燥,用上面這樣設(shè)置有問(wèn)題,修改一下即可
button.imageEdgeInsets = UIEdgeInsetsMake(-button.titleLabel.intrinsicContentSize.height-offset/2, 0, 0, -button.titleLabel.intrinsicContentSize.width);
奮斗的七月
2. 設(shè)置文字左對(duì)齊寓娩,圖片右對(duì)齊
button.titleEdgeInsets = UIEdgeInsetsMake(0, -button.imageView.frame.size.width - button.frame.size.width + button.titleLabel.intrinsicContentSize.width, 0, 0);
button.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -button.titleLabel.frame.size.width - button.frame.size.width + button.imageView.frame.size.width);
奮斗的七月