我的问题很简单但我找不到解决方案。我有一个UIButton,它有一个标题和图像。我希望无论发生什么事情都要修复图像位置,所以我这样设置:
[button setImageEdgeInsets:UIEdgeInsetsMake(0.f, 0.f, 0.f, IS_IPHONE ? 20.f : 60.f)];
我没有为按钮的titleLabel
设置任何位置。
接下来发生的事情是我为按钮设置了新标题,标题标签缩小或扩展以适应新文本,令人惊讶的是它使图像移动,因此很明显,尽管应用了图像边缘插入,但图像位置取决于标签的帧。我看到了两种可以使用的解决方案:
1)使图像独立于标签的框架
2)为标签
设置固定大小但我不知道如何实现它们。能否请您给我一些建议如何解决这个问题?
答案 0 :(得分:6)
您可以为UIButton创建子类并管理图像&amp ;;标题。 覆盖以下方法并返回适当的图像&根据您的要求标题。
-(CGRect)imageRectForContentRect:(CGRect)contentRect;
-(CGRect)titleRectForContentRect:(CGRect)contentRect;
答案 1 :(得分:5)
要在Interface Builder中解决此问题,请执行以下步骤。
首先设置图像和按钮的文本。然后,您将要在图像和按钮之间创建一些空间。这需要两个步骤: 1)将左侧内容设置为10点 2)然后将图像插入设置为负10点
第1步:
第2步:
然后强制按钮向右扩展文本,只在左侧添加约束:
你不能只使用左边插图的标题是因为这样你的标题会被截断:
这是因为内部按钮大小调整不考虑标题和图像插入,只使用内容插入。
答案 2 :(得分:1)
这是因为设置了UIButton的图像插入和标题插入。 您可以尝试@mehul patel,@ Nirav BHatt和@The dude给出的上述建议。
或者您可以尝试这种方式:在这里我们假设您的图像是第一个,然后是按钮中的titleLabel。
//-------- Create button ---------
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(50, 100, 100, 40)];
btn.backgroundColor = [UIColor cyanColor];
//----- Create imageview --------
UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)];
imgView.image = [UIImage imageNamed:@"your_image_name.png"];
//----- Create Name label -----------
UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(imgView.frame.origin.x+imgView.frame.size.width+10, 0, 80, btn.frame.size.height)];
nameLabel.backgroundColor = [UIColor blueColor];
nameLabel.textAlignment = NSTextAlignmentLeft;
nameLabel.textColor = [UIColor whiteColor];
nameLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14];
nameLabel.text = @"your title label";
nameLabel.adjustsFontSizeToFitWidth = YES;
[nameLabel sizeToFit];
//-------- Resize button frame ----------
btn.frame = CGRectMake(btn.frame.origin.x, btn.frame.origin.y, nameLabel.frame.origin.x+nameLabel.frame.size.width+10, btn.frame.size.height);
[btn addSubview:nameLabel];
[btn addSubview:imgView];
您可以反过来添加图像和标签(第一个标签,然后是图像),然后根据它更新按钮框。