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中显示图片和标题,只要它们足够小即可。 困难的部分来,当你需要处理的位置。
你可以玩UIButton
的contentVerticalAlignment
和contentHorizontalAlignment
属性(从UIControl
inheritance)。
您还可以使用titleEdgeInsets
和imageEdgeInsets
属性来根据alignment属性将标题和图像从其获取的位置移动。
如果你想要非常准确或定制的位置,我build议覆盖UIButton
的titleRectForContentRect:
和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
的子类,并将你想要的视图( UILabel
, UIImageView
)放到一个xib文件中。 然后,您可以定期使用Autolayout,而无需分类UIEdgeInsets
。