实质上UIButton中是内置的两个控件imageView和titleLabel,可以用来显示图片(非背景图片)和文本。
所以UIButton 中可以添加image和text,默认情况下,text显示在image的右边,且二者y值都居中显示(依赖于button的contentHorizontalAlignment:居左、居右、居中)。
显示格式区分:
1.当button.width < image.width时,只显示被压缩后的图片,图片是按照fillXY的方式压缩。
2.当button.width > image.width,且button.width < (image.width+text.width)时,图片正常显示,文本被压缩。
3.当button.width > (image.width+text.width)时,两者并列默认居中显示,可通过button的属性contentHorizontalAlignment改变对齐方式。
想改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。对titleLabel和imageView设置偏移是针对他当前的位置起作用的,并不是针对距离button边框的距离的。
typedef NS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {
UIControlContentHorizontalAlignmentCenter = 0,//居中
UIControlContentHorizontalAlignmentLeft = 1,//居左
UIControlContentHorizontalAlignmentRight = 2,//居右
UIControlContentHorizontalAlignmentFill = 3,//
};
(1)居中
(2)居左
(3)居右
(4)充满
初始条件:此时的size如图,(居左状态)
,;
想要让图片和文本上下排列,需要让image向下偏移(距离上面的间隙),向右偏移(button.width - image.width/2)。(向左和向上偏移传负值)
title向下偏移(图片的高度+间隙),向右偏移((button.width - image.width)/2 - image.width),因为文本本身的其实x位置是从image.width开始的,所以计算偏移时要减掉这个宽度。
效果如图: