UIButton上下结构垂直居中
2016-03-01 17:39
495 查看
因为项目需要,我做了一个这么一个特别的按钮
1.先让image向下偏移10(距离上边间隙),然后向右偏移92( button.width - image.width / 2),计算下来为 [btn setImageEdgeInsets:UIEdgeInsetsMake(5, 92, 0, 0)],它的偏移是针对它图1时的位置,如果想向上偏移传的为负值。
2.计算机文本偏移了,向下偏移46 (36+10 图片的高度+间隙),向右偏移44 ( (button.width - text.width) / 2 - image.width );因为文本本身起始x方向位置是从image.width开始的,所以算偏移时,要减掉这个宽度。计算结果为[btn setTitleEdgeInsets:UIEdgeInsetsMake(46, 44, 0, 0)];
func loadSpecifitButton() { //将图片指定大小 var image = UIImage.init(named: "img_more_update"); UIGraphicsBeginImageContext(CGSizeMake(60, 60)); image?.drawInRect(CGRectMake(0, 0, 60, 60)); image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); let btnFor = UIButton.init(type: .Custom); btnFor.setImage(image, forState: .Normal); print(image?.size) btnFor.setTitle("1111111111", forState: .Normal); btnFor.setTitleColor(UIColor.blackColor(), forState: .Normal); btnFor.frame = CGRectMake(50, 100, 100, 100); btnFor.contentHorizontalAlignment = .Left; btnFor.contentVerticalAlignment = .Top; btnFor.imageEdgeInsets = UIEdgeInsetsMake(10, (btnFor.frame.size.width - (btnFor.imageView?.frame.size.width)!) / 2, 0, 0); btnFor.titleEdgeInsets = UIEdgeInsetsMake((btnFor.imageView?.frame.size.height)! + 20, (btnFor.frame.size.width - (btnFor.titleLabel?.frame.size.width)!) / 2 - (btnFor.imageView?.frame.size.height)! - 20, 0, 0); btnFor.layer.masksToBounds = true; btnFor.layer.borderColor = UIColor.blackColor().CGColor; btnFor.layer.borderWidth = 1; self.view.addSubview(btnFor); }
前提:UIButton: width=220, height=100, image: width=height=36 text width=62
0.想两改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。需要注意的是,对titleLabel和imageView设置偏移,是针对它当前的位置起作用的,并不是针对它距离button边框的距离的。把button的contentHorizontalAlignment设为居左时,contentVerticalAlignment设为居上时,可以很方便的通过EdgeInsets改变两个子控件的位置。1.先让image向下偏移10(距离上边间隙),然后向右偏移92( button.width - image.width / 2),计算下来为 [btn setImageEdgeInsets:UIEdgeInsetsMake(5, 92, 0, 0)],它的偏移是针对它图1时的位置,如果想向上偏移传的为负值。
2.计算机文本偏移了,向下偏移46 (36+10 图片的高度+间隙),向右偏移44 ( (button.width - text.width) / 2 - image.width );因为文本本身起始x方向位置是从image.width开始的,所以算偏移时,要减掉这个宽度。计算结果为[btn setTitleEdgeInsets:UIEdgeInsetsMake(46, 44, 0, 0)];
相关文章推荐
- iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片上下垂直居中对齐
- Swift之贪婪的UIButton
- UIButton拖动响应事件,距离问题
- IOS 7.1 兼容性bug 问题,UIButton,UILabel ...
- UIKit框架(18)UIButton和UITextField
- UIButton小结
- [Swift]UIKit学习之UIButton的用法
- UIButton的使用
- 第一个IOS程序(代码版)
- IOS 简易图片浏览器
- iOS UI三大控件和应用程序启动流程
- iOS UIButton的简单实用方法
- iOS 短信验证码
- UIButton
- 九宫格的算法
- 计算文本和图片的高度
- IOS 设置 navigationItem.rightBarButtonItem leftBarButtonItem 字体按钮
- 发散按钮浅谈
- iOS中UIButton的block
- UIButton常用技巧