iPhone SDK的:图像和文字的UIButton可能吗?

我有一个尺寸宽200和高270的button。我想要在同一个button上有文字和图像。 不作为该文本的背景图片。 而不是这个,我想在同一个button上显示高度120和高度图像150的文本。 有人有想法吗? 如果你不明白我的问题,请让我知道。

你可以使用这个代码,它会服务于你的目的

.h file code IBOutlet UIButton *testBtn; .m file code [testBtn setImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal]; [testBtn setTitleEdgeInsets:UIEdgeInsetsMake(70.0, -150.0, 5.0, 5.0)]; [testBtn setTitle:@"Your text" forState:UIControlStateNormal]; 

根据需要调整button的坐标和大小。这是一个示例代码来指导您。

PS:在nib文件中添加一个UIButton>将其设为自定义button>将IBOutlet连接到nib文件中的自定义button。

下面的代码显示了使用UIButton类的setImageEdgeInsets和setTitleEdgeInsets属性在button中放置图像和文本。

 UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom ]; [butt setFrame:CGRectMake(0, 0, 100, 100)]; [butt setBackgroundImage:[UIImage imageNamed:@"sig.png"] forState:UIControlStateNormal]; [butt setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0, 50.0, 0.0)]; [butt setTitleEdgeInsets:UIEdgeInsetsMake(75.0, 0.0, 0.0, 0.0)]; [butt setTitle:@"hello" forState:UIControlStateNormal]; [butt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.view addSubview:butt]; 
 [testBtn setBackgroudImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal]; [testBtn setTitle:@"Your text" forState:UIControlStateNormal]; 

使用子视图的概念。 以3个控件, UIButton (200×270), UILabel (200×120)和UIImageView (200×150)。 将图像分配给UIImageView并设置UILabel的文本。 根据UIButton的(x,y)位置来定位标签和imageview控件。

最后,你应该有这样的东西:

对于以下情况:

 UIButton *button; UILabel *label; UIImageView *imageView; [button addSubView:imageView]; [button addSubView:label]; 

是的,您可以在同一个button中显示图片和标题,只要它们足够小即可。 困难的部分来,当你需要处理的位置。

你可以玩UIButtoncontentVerticalAlignmentcontentHorizontalAlignment属性(从UIControlinheritance)。

您还可以使用titleEdgeInsetsimageEdgeInsets属性来根据alignment属性将标题和图像从其获取的位置移动。

如果你想要非常准确或定制的位置,我build议覆盖UIButtontitleRectForContentRect:imageRectForContentRect:方法。 这些允许您为标题和图像定义框架,并且只要需要布置button,就会调用这些框架。 一个警告,如果你想引用self.titleLabel里面的titleRectForContentRect: ,确保self.currentTitle定义self.currentTitle 。 我遇到了一个错误的访问错误,可能是第一次初始化titleLabel时调用的方法。

在Swift 3

 let button = UIButton() //make sure the image (jpg, png) you are placing in the button //is about the right size or it will push the label off the button //add image let image = UIImage(named:"my_button_image") button.setImage(image, for: .normal) button.imageView?.contentMode = .scaleAspectFit button.imageEdgeInsets = UIEdgeInsets(top:0, left:-30, bottom:0, right:0) //adjust these to have fit right //add title button.setTitle("Fan", for: .normal) button.titleEdgeInsets = UIEdgeInsets(top:0, left:10, bottom:0, right:0) //adjust insets to have fit how you want //add button to your view - like in viewDidLoad or your own custom view setup addSubview(button) 

如果使用故事板,则不要忘记设置定位点(如果以编程方式进行定位),将其附加到Interface Builder中的button引用

如果你想对布局有更多的控制权,可以创build一个UIControl的子类,并将你想要的视图( UILabelUIImageView )放到一个xib文件中。 然后,您可以定期使用Autolayout,而无需分类UIEdgeInsets