如何在 UIButton 中将 UIImageView 与它的文本居中?

Posted

技术标签:

【中文标题】如何在 UIButton 中将 UIImageView 与它的文本居中?【英文标题】:How to center UIImageView within UIButton with its text? 【发布时间】:2016-06-13 07:07:58 【问题描述】:

我有一个UIButton,我正在添加这样的图像:

UIImageView *cardImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Visa.png"]];
cardImage.frame = CGRectMake(15, _cardButton.frame.size.height - 25 - 10, 25, 25);
cardImage.contentMode=UIViewContentModeScaleAspectFit;
[_cardButton addSubview:cardImage];

如何以UIButton 的 titleLable 为中心显示此图像?

【问题讨论】:

【参考方案1】:

// 像这样试试

cardImage.frame = _cardButton.frame;
cardImage.center = _cardButton.center;
cardImage.contentMode=UIViewContentModeCenter;

【讨论】:

【参考方案2】:

试试这个可能对你有帮助

CGFloat flotspacing = 50; // the amount of spacing to appear between image and title
Btn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, flotspacing);
Btn.titleEdgeInsets = UIEdgeInsetsMake(0, flotspacing, 0, 0);

还可以使用 .h 和 .m 文件尝试此代码

UIButton+BtnPosition.h

@interface UIButton(ImageTitleCentering)

 -(void) centerButtonPositionAndImageWithSpacing:(CGFloat)spacing;

@end

UIButton+BtnPosition.m

  @implementation UIButton(ImageTitleCentering)

     -(void) centerButtonPositionAndImageWithSpacing:(CGFloat)spacing 
         self.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, spacing);
         self.titleEdgeInsets = UIEdgeInsetsMake(0, spacing, 0, 0);
     

@结束

现在用下面的方法调用这个函数

  [button centerButtonPositionAndImageWithSpacing:10];

我使用这种编码来设置按钮图像和标题,它可能对你有帮助。

谢谢...

【讨论】:

【参考方案3】:

不要将 imageview 添加为 UIButton 的子视图,而是尝试使用按钮图像属性设置图像。

// the space between the image and text
    CGFloat spacing = 6.0;

    // lower the text and push it left so it appears centered 
    //  below the image
    CGSize imageSize = button.imageView.image.size;
    button.titleEdgeInsets = UIEdgeInsetsMake(
      0.0, - imageSize.width, - (imageSize.height + spacing), 0.0);

    // raise the image and push it right so it appears centered
    //  above the text
    CGSize titleSize = [button.titleLabel.text sizeWithAttributes:@NSFontAttributeName: button.titleLabel.font];
    button.imageEdgeInsets = UIEdgeInsetsMake(
      - (titleSize.height + spacing), 0.0, 0.0, - titleSize.width);

    // increase the content height to avoid clipping
    CGFloat edgeOffset = fabsf(titleSize.height - imageSize.height) / 2.0;
    button.contentEdgeInsets = UIEdgeInsetsMake(edgeOffset, 0.0, edgeOffset, 0.0);

【讨论】:

【参考方案4】:

为什么要将UIImageView 作为子视图添加到UIButtonUIButton 具有 BackgroundImageImage 属性来将您的图像设置为按钮。将contentMode 属性设置为center 以使图像居中。

_cardButton.contentMode=UIViewContentModeCenter;

如果imageUIButton 中看起来太大,请缩小image 的大小或让您的设计师提供所需的Padding 的图像。

【讨论】:

但我并不想把它变成背景图片。

以上是关于如何在 UIButton 中将 UIImageView 与它的文本居中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIToolbar 完成按钮中将焦点从一个 UIButton 设置到另一个 UIButton

如何在 UIButton 中将 UIImageView 与它的文本居中?

如何在 RxSwift 中将 UISwitch 绑定到 UIButton 启用?

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

在 cellForRowAtIndexPath 中将 UIButton 视为 UILabel

在 Swift 中将多个 UIButton 添加到多个 UIView