iOS 调整UIButton 图片(imageView)与文字(titleLabel)的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 调整UIButton 图片(imageView)与文字(titleLabel)的位置相关的知识,希望对你有一定的参考价值。

参考技术A

UIButton可以同时设置Title和Image,UIButton有两个属性:titleEdgeInsets(top,left,bottom,right)和imageEdgeInsets(top,left,bottom,right),通过设置这两个,就可以实现所有需要的Button的样式
UIButton 的 默认状态下imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0);titleEdgeInsets = UIEdgeInsetsMake(0,0,0,0); 图片在左文字在右,而且整体水平和垂直居中 。比如下面这个图文按钮:

为了最美观一点,可以设置图标与文字间距 。如下图:

设置图片在右文字在左:

设置图片在上,文字在下:

设置图片左对齐:

设置文字右对齐:

设置文字左对齐,图片右对齐:

当 UILabel 动态调整大小时,在 UIView 中移动 UIButton。 iOS

【中文标题】当 UILabel 动态调整大小时,在 UIView 中移动 UIButton。 iOS【英文标题】:Move UIButton in UIView when UILabel is resized dynamically. iOS 【发布时间】:2014-03-27 09:47:26 【问题描述】:

我在自定义 UIView 中有一个 UILabel 和一个 UIButton。我的UIButton 站点位于我的UILabel 下方。

我的 UILabel 文本改变了它的大小并与我的 UIButton 重叠。

当 UILabel 自行调整大小时,我希望能够将我的 UIButton 向下移动?

我只设法动态调整UILabel 的大小,但无法调整或移动我的UIButton

self.chosenCategoriesLabel.font = [UIFont fontWithName:@"Helvetica-Light" size:17.0];
self.chosenCategoriesLabel.textColor = [UIColor colorWithRed:161.0/255.0 green:205.0/255.0 blue:86.0/255.0 alpha:1.0];
self.chosenCategoriesLabel.font = [UIFont fontWithName:@"Helvetica-Light" size:15.0];
self.chosenCategoriesLabel.numberOfLines = 0;
self.selectedCategoriesString = [self.selectedCategoriesArray componentsJoinedByString:@","];
self.chosenCategoriesLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.chosenCategoriesLabel.text = [self.selectedCategoriesString stringByAppendingString:@"\n\n\n\n"];
[self.selectionsWrapper addSubview:self.chosenCategoriesLabel];

self.chosenCategoriesLabel.frame = CGRectMake(self.chosenCategoriesLabel.frame.origin.x, self.chosenCategoriesLabel.frame.origin.y, self.chosenCategoriesLabel.frame.size.width, [self sizeLabel]);

[self.itemThumbnail setImageWithURL:self.item.itemImageURL placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]];
[self.view addSubview:self.itemThumbnail];

[self.selectCategorieButton setTitle:@"Select Categories" forState:UIControlStateNormal];
[self.selectCategorieButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.selectCategorieButton setTitle:@"Select Categories" forState:UIControlStateHighlighted];
[self.selectCategorieButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
self.selectCategorieButton.titleLabel.font = lightHelveticaFont;
[self.selectCategorieButton setBackgroundImage:[UIImage imageNamed:@"btn_choose_categories.png"] forState:UIControlStateNormal];
[self.selectCategorieButton setBackgroundImage:[UIImage imageNamed:@"btn_choose_categories.png"] forState:UIControlStateHighlighted];
[self.selectCategorieButton.titleLabel setFont:[UIFont boldSystemFontOfSize:15]];
[self.selectCategorieButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Light" size:15.0]];
[self.selectionsWrapper addSubview:self.selectCategorieButton];

[self changeLabel];

self.chosenCategoriesLabel.frame = CGRectMake(self.chosenCategoriesLabel.frame.origin.x, self.chosenCategoriesLabel.frame.origin.y, self.chosenCategoriesLabel.frame.size.width, [self sizeLabel]);

-(void)changeLabel 

self.chosenCategoriesLabel = [NSString stringWithFormat:@"%@",array]; 

self.chosenCategoriesLabel.frame = CGRectMake(self.chosenCategoriesLabel.frame.origin.x, self.chosenCategoriesLabel.frame.origin.y, self.chosenCategoriesLabel.frame.size.width, [self sizeLabel]);

 

- (CGFloat) sizeLabel

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
CGSize sizeToFit = [self.chosenCategoriesLabel.text sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(276.0f, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];
#pragma clang diagnostic pop
return fmaxf(22.0f, sizeToFit.height + 40); 

【问题讨论】:

这是你的初始化代码吗?你能显示你调整标签大小的部分吗? 您首先在哪里创建按钮和标签?因为您似乎是通过代码将它们添加到视图中? 我在界面生成器中创建了 uibutton 和 uilabel。我只在我的代码中更改了两者的配置 如果你想实现这一点,那么更好的选择是以编程方式创建并基于字符串值动态设置按钮和标签的框架。 你使用自动布局吗? 【参考方案1】:

有几件事...

当您说您在 IB 中创建了 UI 组件时,我不确定您为什么要再次重新添加它们?例如,如果控件已经在视图中,则不需要像下面这样的行

[self.selectionsWrapper addSubview:self.chosenCategoriesLabel];

你也执行了这行两次?

self.chosenCategoriesLabel.frame = CGRectMake(self.chosenCategoriesLabel.frame.origin.x, self.chosenCategoriesLabel.frame.origin.y, self.chosenCategoriesLabel.frame.size.width, [self sizeLabel]);

要调整按钮的框架,请执行以下操作...

// Get the original frames;
CGRect buttonFrame = self.selectCategorieButton.frame;
CGRect labelFrame = self.chosenCategoriesLabel.frame;

//Work out the new height
CGFloat newHeight = [self sizeLabel];

//Work out what the difference is
CGFloat adjustment = newHeight - labelFrame.size.height;

//Set the labels new height
labelFrame.size.height = newHeight;
self.chosenCategoriesLabel.frame = labelFrame;

//add the difference to the buttons frame
buttonFrame.origin.y = buttonFrame.origin.y + adjustment;
self.selectCategorieButton.frame = buttonFrame;

根据您定义自定义视图的方式,您可能还必须调整其高度以适应按钮的新位置?

【讨论】:

以上是关于iOS 调整UIButton 图片(imageView)与文字(titleLabel)的位置的主要内容,如果未能解决你的问题,请参考以下文章

iOS button 里边图片和文字的距离

当 UILabel 动态调整大小时,在 UIView 中移动 UIButton。 iOS

如何通过 IOS 7 中的文本自动调整 UIButton 的大小?

调整UIbutton Image大小 及title和位置

设置 UIButton 的 backgroundImage 时不调整大小,但定位

调整 UIButton 宽度/高度 (iOS) - 如何在不禁用自动布局的情况下解决?