一、內邊距
UIButton有三個屬性,分別可以設置按鈕以及內部子控件的內邊距
1、contentEdgeInsets
如果是設置contentEdgeInsets, 會把UIImageView和UIlabel當做一個整體移動
btn.contentEdgeInsets = UIEdgeInsetsMake(30, 0, 0, 0);
對應狀態:
2、titleEdgeInsets/imageEdgeInsets
如果是設置titleEdgeInsets/imageEdgeInsets. 那么不會影響到另外一個, 也就是只會改變當前設置的這個控件
btn.titleEdgeInsets = UIEdgeInsetsMake(0, 30, 0, 0); btn.imageEdgeInsets = UIEdgeInsetsMake(30 ,0 , 0, 0);
二、圖片拉伸
1.iOS5以前
UIButton *btn = [[UIButton alloc] init]; UIImage *image = [UIImage imageNamed:@"common_button_blue_highlighted"]; // LeftCapWidth: 左邊多少不能拉伸 // 右邊多少不能拉伸 = 控件的寬度 - 左邊多少不能拉伸 - 1 // right = width - leftCapWidth - 1 // 1 = width - leftCapWidth - right // topCapHeight: 頂部多少不能拉伸 // 底部有多少不能拉伸 = 控件的高度 - 頂部多少不能拉伸 - 1 // bottom = height - topCapWidth - 1 // 1 = height - topCapWidth - bottom UIImage *newImage = [image stretchableImageWithLeftCapWidth:5 topCapHeight:5];
2.iOS5開始
// UIEdgeInsets是告訴系統哪些地方需要受保護, 也就是不可以拉伸 // resizableImageWithCapInsets默認拉伸方式是平鋪 UIEdgeInsets insets = UIEdgeInsetsMake(image.size.height * 0.5, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5); UIImage *newImage = [image resizableImageWithCapInsets:insets];
3.iOS6開始
// resizingMode指定拉伸模式 // 平鋪 // 拉伸 UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5); UIImage *newImage = [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch]; [btn setBackgroundImage:newImage forState:UIControlStateNormal]; btn.frame = CGRectMake(100, 100, 200, 80); [self.view addSubview:btn];