UIButton设置图像和标题
UIButton设置图像和标题
我使用以下代码加载一个图片,在按钮的上半部分是图片,下半部分是标题,但是只有图片显示出来,是什么原因呢?如果有好的建议,请告诉我们,谢谢。
UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(160, 400, 73, 44)]; [myButton setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal]; [myButton setImageEdgeInsets: UIEdgeInsetsMake(0,0,22,0)]; [myButton setTitle:@"test" forState:UIControlStateNormal]; [myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [myButton setTitleEdgeInsets: UIEdgeInsetsMake(22,10,0,10)]; [self.view addSubview:myButton];
问题的原因是想要在UIButton上同时设置图片和标题,但是作者给出的两种解决方法都存在一些问题。
第一种解决方法中,作者创建了一个UIButton实例,并设置了其frame属性。然后,作者创建了一个UIImageView实例,并给其image属性赋值为一个UIImage实例。接下来,作者设置了UIImageView实例的frame属性为UIButton实例的frame属性,但是减去了18个像素的高度。最后,作者设置了UIButton实例的title和titleColor属性,并给其添加了一个点击事件。最后,将UIImageView实例和UIButton实例添加到了视图中。
第二种解决方法中,作者创建了一个UIButton实例,并设置了其frame属性。然后,作者使用setImage:forState:方法给UIButton实例设置了图片,并使用setImageEdgeInsets:方法设置了图片的偏移。接下来,作者设置了UIButton实例的title和titleColor属性,并给其设置了titleEdgeInsets属性。最后,将UIButton实例添加到了视图中。
然而,这两种解决方法都存在一些问题。在第一种解决方法中,UIImageView实例被添加到UIButton实例上方,这可能会导致点击事件无法触发。在第二种解决方法中,作者建议将图片的大小调整为23x23像素,这可能会导致图片失真或不符合设计需求。
解决这个问题的方法是使用UIButton的setImage:forState:方法和setTitle:forState:方法来同时设置图片和标题。然后,可以使用setImageEdgeInsets:方法和setTitleEdgeInsets:方法来设置图片和标题的偏移。这样可以避免上述问题,并实现预期的效果。
以下是修改后的代码示例:
UIButton *myButton = [[UIButton alloc]initWithFrame:CGRectMake(160, 400, 73, 55)]; UIImage *img = [UIImage imageNamed:@"icon.png"]; [myButton setImage:img forState:UIControlStateNormal]; [myButton setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [myButton setTitle:@"test" forState:UIControlStateNormal]; [myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [myButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [myButton addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:myButton];
希望这篇文章可以帮助解决问题,祝编码愉快!