当我将内容插入设置为将其移动到底部时,为啥 UIButton 将标题标签一直向右移动?
Posted
技术标签:
【中文标题】当我将内容插入设置为将其移动到底部时,为啥 UIButton 将标题标签一直向右移动?【英文标题】:Why does the UIButton move the title label all the way to the right when I set content insets to move it to the bottom?当我将内容插入设置为将其移动到底部时,为什么 UIButton 将标题标签一直向右移动? 【发布时间】:2013-06-17 23:06:42 【问题描述】:我正在尝试在文本上方制作一个带有图像的 UIButton。为此,我尝试将按钮的边缘插图设置为:
[button setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 0.0f, 10, 0.0f)];
[button setTitleEdgeInsets:UIEdgeInsetsMake(10, 0.0, 0.0, 0.0)];
我得到的是一个按钮,其中图像在同一个位置,文本被压扁到一边,在大约一个字符宽的空间中。
如何简单地设置插图,以便在文本上方显示图像?真的有这么多要问的吗?
【问题讨论】:
看看这个:***.com/questions/2808078/… 【参考方案1】:您只是错误地计算了 edgeInSets。它们并不像您认为的那样存在。这是我的测试代码。将图像和标题放在正确的位置确实花了我一些时间。
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 宽 x 40 高的 UIButton。您在底部插入图像 20。但是当你去插入文本时,你在左边做20,在上面做-258?我想我明白了为什么它是负数,但为什么幅度大于按钮的幅度? 哦,如果你正在打印一个框架矩形或任何其他 CGRect,有一个函数 NSStringFromCGRect 会以一个很好的格式打印你的矩形,这意味着你不必输入太多在您的 NSLog 语句中;) 是的,非常感谢。这将为我节省很多工作。我之前做过:"[tmp_testBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)];[tmp_testBtn setTitleEdgeInsets:UIEdgeInsetsMake (20, 0, 0, 0)];",并且 titleRect 的 NSLog 给了我这个:"titleRect:256.000000,30.000000,-196.000000,0.000000" 这也困扰着我。而这个"你在左边做 20,和-258在顶部”应该是“20在顶部,-258在左边”以上是关于当我将内容插入设置为将其移动到底部时,为啥 UIButton 将标题标签一直向右移动?的主要内容,如果未能解决你的问题,请参考以下文章