Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当我设置内容插入以将标题标签移动到底部时,为什么UIButton会将标题标签一直向右移动?_Ios_Uibutton_Uiedgeinsets - Fatal编程技术网

Ios 当我设置内容插入以将标题标签移动到底部时,为什么UIButton会将标题标签一直向右移动?

Ios 当我设置内容插入以将标题标签移动到底部时,为什么UIButton会将标题标签一直向右移动?,ios,uibutton,uiedgeinsets,Ios,Uibutton,Uiedgeinsets,我正在尝试制作一个在文本上方带有图像的UIButton。为此,我尝试将按钮的边缘插入设置为: [button setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 0.0f, 10, 0.0f)]; [button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0.0, 0.0, 0.0)]; 我得到的是一个按钮,图像在同一个位置,文本被挤压到一边,大约一个字符宽 如何简单地设置插图,使图像位于文本上方?这真的有那么多问题吗?你只

我正在尝试制作一个在文本上方带有图像的UIButton。为此,我尝试将按钮的边缘插入设置为:

[button setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 0.0f, 10, 0.0f)];
[button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0.0, 0.0, 0.0)];
我得到的是一个按钮,图像在同一个位置,文本被挤压到一边,大约一个字符宽


如何简单地设置插图,使图像位于文本上方?这真的有那么多问题吗?

你只是错误地计算了边缘集。它们不是你想象的那样。这是我的测试代码。把图片和标题放在正确的位置确实花了我一段时间

UIButton *tmp_testBtn = [[UIButton alloc] initWithFrame:CGRectMake(50, 200, 60, 40)];
tmp_testBtn.backgroundColor = [UIColor grayColor];
[tmp_testBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)];
[tmp_testBtn setImage:[UIImage imageNamed:@"France"] forState:UIControlStateNormal];
[tmp_testBtn setTitleEdgeInsets:UIEdgeInsetsMake(20, -258, 0, 0)];
[tmp_testBtn setTitle:@"testbutton" forState:UIControlStateNormal];

CGRect contentRect = [tmp_testBtn contentRectForBounds:tmp_testBtn.bounds];
NSLog(@"contenRect:%f,%f,%f,%f",contentRect.origin.x,contentRect.origin.y,contentRect.size.width,contentRect.size.height);
CGRect titleRect = [tmp_testBtn titleRectForContentRect:contentRect];
NSLog(@"titleRect:%f,%f,%f,%f",titleRect.origin.x,titleRect.origin.y,titleRect.size.width,titleRect.size.height);
CGRect imageRect = [tmp_testBtn imageRectForContentRect:contentRect];
NSLog(@"imageRect:%f,%f,%f,%f",imageRect.origin.x,imageRect.origin.y,imageRect.size.width,imageRect.size.height);

[self.view addSubview:tmp_testBtn];
[tmp_testBtn release];

顺便说一句,我不会这样做。我更喜欢自定义一个带有UIImageView和UILabel的按钮。

看看这个:我并不完全了解如何找到您使用的数字。你有一个60宽40高的UIButton。将图像20插入底部。但是当你插入文本时,你在左边做20,在上面做-258?我想我明白了为什么它是负数,但为什么它的大小大于按钮的大小?哦,如果你打印一个frame rect或任何其他CGRect,有一个函数NSStringFromCGRect,它将以一种很好的格式打印你的rect,这意味着你不必在你的NSLog语句上键入太多;)是的,非常感谢。这将节省我很多工作。我之前做过:“[tmp_testBtn setImageEdgeInsets:UIEdgeInsetsMake(0,0,20,0)];[tmp_testBtn setTitleEdgeInsets:UIEdgeInSetMake(20,0,0,0)]”,titleRect的NSLog给了我这个:“titleRect:256.000000,30.000000,-,-196.000000,0.000000”这也让我很困扰“左边是20,上面是-258”应该是“上面是20,左边是-258”